NSNumberFormatter格式化不适用于浮点数的货币

时间:2012-05-11 04:04:10

标签: ios

我正在使用NSNumberFormatter来格式化货币,但是当我使用浮点数时,格式化程序无法正常工作。但是当我使用double时它可以工作。我需要它与浮动工作,因为我不需要工作双倍。

float t1 = 999999.99;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setAllowsFloats:YES];
[formatter setMaximumFractionDigits:2];
[formatter setAlwaysShowsDecimalSeparator:YES];
[formatter setGeneratesDecimalNumbers:YES];
NSString *formattedOutput = [formatter stringFromNumber:[NSNumber numberWithFloat:t1]];
NSLog(@"Output as currency: %@", formattedOutput);

此输出 - 输出为货币:$ 1,000,000.00 而不是$ 9,99,999.99

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

为了避免浮点数(和双打)的舍入问题,对于货币,你应该使用NSDecimalNumber。您的问题中列出的所有现有代码都与它们一起使用。只需摆脱你的浮动并改用以下行:

NSDecimalNumber *t1 = [NSDecimalNumber decimalNumberWithString:@"999999.99"];

(请注意,还有其他方法可以创建NSDecimalNumber,具体取决于您填充变量的方式。)