我正在使用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

在此先感谢您的帮助。

最佳答案

为了避免浮点数(和双精度数)的舍入问题,对于货币,您应该使用NSDecimalNumber。您的问题中列出的所有现有代码均适用于它们。只需摆脱浮动,然后使用以下行即可:

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


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

关于ios - NSNumberFormatter格式化货币不适用于浮点数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10545290/

10-13 07:49