Я обрабатываю большие 64-битные целые числа без знака из источника JSON, которые анализируются в NSDecimalNumbers, что, по-видимому, предназначено для «точного представления чисел произвольной точности».
Проблема I Я не могу получить правильные числа из этого класса. Например (с использованием максимально возможного значения):
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. Ему не нравятся значения, превышающие 9223372036854775808. Однако кажется, что число хранится с полной точностью в NSDecimalNumber, например:
po [[NSDecimalNumber decimalNumberWithString:@"18446744073709551615"] stringValue]
= 18446744073709551615
Я заметил, что объекты NSNumber могут нормально обрабатывать эти большие числа, а unsignedLongLongValue работает правильно. Это просто NSDecimalNumbers (с которым я застрял), которые не работают.
Как я могу получить правильные беззнаковые длинные длинные значения из NSDecimalNumbers? Или, по крайней мере, преобразовать их в объекты NSNumber, где работает unsignedLongLongValue.