Как отобразить валюту без округления в виде строки в Xcode? - PullRequest
1 голос
/ 05 февраля 2010

У меня проблемы с валютой

999999999999999999,99

Исходя из этого значения, я хочу отобразить его как строку. Проблема в том, что значение всегда округляется до

1000000000000000000,00

Я не ожидаю, что округленное значение. Я хочу, чтобы отображалось исходное значение. У вас есть идеи, как решить эту проблему? Я попробовал этот код из некоторого ответа / turorial в stackoverflow.com:

NSMutableString *aString = [NSMutableString stringWithCapacity:30];

NSNumberFormatter *aCurrency = [[NSNumberFormatter alloc]init];
[aCurrency setFormatterBehavior:NSNumberFormatterBehavior10_4];
[aCurrency setNumberStyle:NSNumberFormatterCurrencyStyle];   
[aCurrency setMinimumFractionDigits:2];
[aCurrency setMaximumFractionDigits:2];
[aString appendString:[aCurrency stringFromNumber:productPrice]];
//productPrice is NSDecimalNumber which is have value 999999999999999999.99

cell.textLabel.text = aString;
NSLog(@"the price = %@",cell.textLabel.text);
//it prints $1,000,000,000,000,000,000.00
[aCurrency release];

Ответы [ 2 ]

4 голосов
/ 05 февраля 2010

Если у вас нет веских причин не делать этого, обычно лучше хранить значения валюты в формате с фиксированной запятой , а не с плавающей запятой. Ada поддерживает это напрямую, но для языков C-ish вы сохраняете значение в единицах пенни , а не в долларах, и конвертируете его только в тех случаях, когда вы его отображаете.

Таким образом, в этом случае значение productPrice будет 99999999999999999999 (центов). Чтобы отобразить это, вы должны сделать что-то вроде этого (Если бы это был C. Я не знаю языка):

int const modulus = productPrice % 100;
printf ("The price = %d.%d\n", (int) ((productPrice - modulus) / 100), modulus);

Я бы также использовал целое число, а не переменную с плавающей запятой, чтобы сохранить значение почти во всех случаях. В этом случае это не сработает (даже если вы используете 64-разрядное целое число), потому что ваше значение ошеломительно велико. Мы говорим в 1 миллион раз больше, чем государственный долг США! Если такое большое значение доллара когда-либо в моей жизни имеет смысл, у нас у всех большие проблемы.

0 голосов
/ 05 февраля 2010

Вы пробовали это:

* – setRoundingBehavior:
* – roundingBehavior
* – setRoundingIncrement:
* – roundingIncrement
* – setRoundingMode:
* – roundingMode
...