我正在处理从JSON源获取的大型64位无符号整数,这些数字被解析为NSDecimalNumbers,它显然是为了“忠实地表示任意精度的数字”而设计的。
我的问题是,我无法从这个类中获取正确的数字。例如(使用最大可能值):
print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] unsignedLongLongValue]
= 0 // Incorrect
print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"9223372036854775808"] unsignedLongLongValue]
= 9223372036854775808 // Correct
print (unsigned long long) [[NSDecimalNumber decimalNumberWithString:@"9223372036854775810"] unsignedLongLongValue]
= 9223372036854775808 // Incorrect
看起来我无法从NSDecimalNumber中获取大于最大有符号long long值的任何值。 它不喜欢大于9223372036854775808的值。 但是,似乎该数字在NSDecimalNumber中以完整精度存储,如下所示:
po [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] stringValue]
= 18446744073709551615
我注意到 NSNumber 对象可以正确处理这些大数,并且 unsignedLongLongValue 可以正常工作。只有 NSDecimalNumbers(我被迫使用)不起作用。
我该如何从 NSDecimalNumbers 中获取正确的无符号长整型值?或者至少将它们转换为 NSNumber 对象,其中 unsignedLongLongValue 可以正常工作。