【发布时间】:2011-07-15 16:49:33
【问题描述】:
我正在处理来自 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 中获取正确的 unsigned long long 值?或者至少将它们转换为 unsignedLongLongValue 工作的 NSNumber 对象。
【问题讨论】:
标签: objective-c cocoa