如何在Xcode中显示货币而不用舍入为字符串?

时间:2010-02-05 13:39:03

标签: iphone xcode nsmutablestring nsdecimalnumber nsnumberformatter

我有货币价值时遇到麻烦

999999999999999999.99

从该值开始,我想将其显示为String。问题是值总是四舍五入到

1000000000000000000.00

我不希望这个价值四舍五入。我希望显示原始值。你知道如何解决这个问题吗?我在stackoverflow.com中尝试了一些answer / turorial中的代码:

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 个答案:

答案 0 :(得分:4)

除非你有充分的理由不这样做,否则通常最好保持定点格式的货币值,而不是浮点数。 Ada直接支持这一点,但对于C-ish语言,您所做的是以便士为单位保留值,而不是美元,并且只有在您进行显示时才进行转换。

因此,在这种情况下,productPrice的值将为99999999999999999999(美分)。要显示它,你会做这样的事情(如果这是C.我不懂语言):

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

我还使用整数而不是浮点变量来保持几乎所有情况下的值。它在这种情况下不起作用(即使你使用64位整数)因为你的值太大了。我们说的话比美国国债还要多1亿美元倍!如果一个美元价值对我生命中的任何事物都有意义,我们都会遇到大麻烦。

答案 1 :(得分:0)

你试过这些:

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