我正在处理来自JSON源的大型64位无符号整数,这些JSON源被解析为NSDecimalNumbers,这显然是“忠实地表示任意精度数字”。NSDecimalNumber和大的无符号long long(64位)整数
我遇到的问题是我不能从这个类中得到正确的数字。例如(使用最大可能值):
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
这样看来,我不能得到任何比符号long long值出NSDecimalNumber的最大大。但是似乎号被存储在一个NSDecimalNumber内全精度它不喜欢比9223372036854775808.较大的值,如:
po [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] stringValue]
= 18446744073709551615
我注意到,NSNumber的对象可以处理这些大量的罚款和unsignedLongLongValue作品正确。这只是NSDecimalNumbers(我坚持)哪些不起作用。
如何从NSDecimalNumbers中得到正确的无符号long long值?或者至少将它们转换为unsignedLongLongValue工作的NSNumber对象。
我不知道问题是否在iOS 5中的NSJSONSerialization类仍然存在不正确的值? – adib
我没有意识到这一点在iOS 5中,我会检查出来 - 谢谢! –
它完全坚持在iOS 5的NSJSONSerialization! o_O –