Estoy manejando enteros grandes sin signo de 64 bits de una fuente JSON que están siendo analizados en NSDecimalNumbers, que aparentemente es "representar fielmente números de precisión arbitraria".NSDecimalNumber y enteros largos largos sin firmar (64 bits)
El problema que tengo es que no puedo obtener los números correctos de esta clase. Por ejemplo (utilizando el valor más grande posible):
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
Parece que no puedo conseguir algo más grande que el máximo firmado mucho, mucho valor a partir de un NSDecimalNumber. No es el gusto valores mayores que 9223372036854775808. Sin embargo, parece que el número se almacena en la precisión completo dentro de un NSDecimalNumber, como:
po [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] stringValue]
= 18446744073709551615
me he dado cuenta de que los objetos NSNumber pueden manejar las obras de estos grandes números finos y unsignedLongLongValue correctamente. Son solo NSDecimalNumbers (con los que estoy atascado) que no funcionan.
¿Cómo puedo obtener valores largos correctos sin firmar de NSDecimalNumbers? O al menos conviértalos en objetos NSNumber donde unsignedLongLongValue funciona.
Me pregunto si el problema persiste en el IOS de 5 NSJSONSerialization clase? – adib
No era consciente de esto en iOS 5, lo comprobaré, ¡gracias! –
¡Persiste totalmente en la NSJSONSerialización de iOS 5! o_O –