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

问题描述:

我有麻烦时,我有货币价值如何在Xcode中显示货币而不用舍入字符串?

999999999999999999.99

从这个价值,我想它显示为字符串。问题是始终四舍五入到

1000000000000000000.00

我没有想到的是四舍五入值值。我想显示原始值。你有什么想法如何解决这个问题?

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

如果你有钱,你可能不在乎(只是kiddin ;-) – 2010-02-05 13:48:48

您是否尝试过这些:我*.com尝试这种代码一些答案/ turorial

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

除非你有很好的理由不,它通常最好保持货币值为定点格式,而不是浮点数。 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

它是完全有效的使用NSDecimal和NSDecimalNumber存储货币值,因为他们做基数10数学,避免十进制表示问题的正常浮点类型。它们还提供高达38位的精度。看到这里:http://*.com/questions/421463/should-i-use-nsdecimalnumber-to-deal-with-money – 2010-02-05 21:06:05

+0

做了一些研究后,它看起来像你是对的,但它有这个条件确切的问题舍入。货币(大部分时间)真正需要的是固定点类型,因为这就是(美国)货币。 – 2010-02-05 22:20:37