2009-08-26 2 views
1

Я хочу сделать некоторую довольно сложную арифметику, которые требуют очень высокой точности, т.е. расчетаКак убедиться, что NSDecimalNumber не представляет дробных цифр?

10000000000 + 0,00000000001 = 10000000000,00000000001 10000000000,00000000001 * 3 = 30000000000,00000000003

Я хочу использовать NSDecimalNumber для такого рода математики, но Проблема заключается в следующем: как прокормить ее этими значениями?

В документации сказано:

- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag 

Первая проблема, которую я вижу, это мантисса. Он требует долгого отсутствия без знака. Насколько я понимаю, этот тип данных, это плавающая точка, верно? Так что, если это так, на этом этапе введенное значение уже «грязно». У него могут быть ненужные дробные цифры где-то в конце. Я не мог найти хорошую документацию на «unsigned long long» из apple, но я помню фрагмент кода, в котором кто-то подавал мантиссу с CGFloat, поэтому я предполагаю, что это тип с плавающей точкой.

Ну, если это действительно какой-то тип с плавающей точкой с плавающей точкой, тогда возникает сложный вопрос: как получить чистое, действительно чистое целое число в эту вещь? Настолько чистый, что я мог бы умножить его на полтриллиона, не получив неправильных результатов?

Есть ли хорошие учебники по использованию NSDecimalNumber на практике?

Редактировать: здесь нет проблем! Всем спасибо!

+1

unsigned long long не является типом с плавающей точкой, это 64-разрядное целое число без знака –

+0

отлично! это означало бы, что все мои проблемы исчезли по этому поводу. спасибо Дугу! – 2009-08-26 14:35:07

ответ

1

Если вы действительно обеспокоены подачей менее точных типов, я бы рекомендовал использовать -initWithString:, -initWithString:locale:+decimalNumberWithString:, или +decimalNumberWithString:locale:. Использование описания строки позволяет избежать необходимости конвертировать числовое представление в плавающую точку или другой численный тип перед созданием NSDecimalNumber.

Смежные вопросы