0

我正在使用 NSNumberFormatter 格式化货币,但是当我使用浮点数时格式化程序不起作用。但是,当我使用双倍时它可以工作。我需要它来处理浮点数,因为我不需要双倍工作。

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

提前感谢您对此的帮助。

4

1 回答 1

1

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

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

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

于 2012-05-11T05:44:28.537 回答