NSDecimalNumber и большие беззнаковые длинные длинные (64-битные) целые числа

Я обрабатываю большие 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.

14
задан Michael Waterfall 15 July 2011 в 16:49
поделиться