我有货币价值时遇到麻烦
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];
答案 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