如何防止iPhone NSNumberFormatter舍入?

thr*_*sty 2 iphone cocoa-touch objective-c

我正在尝试格式化大型货币数字,如下所示:

NSNumber *testVal = [NSDecimalNumber decimalNumberWithString: @"999999999999999993.00"];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumIntegerDigits:19];
[formatter setMaximumFractionDigits:0];
NSNumberFormatter *formatter = [Formatters numberFormatterForField:f];
NSLog([formatter stringFromNumber:testVal]);
Run Code Online (Sandbox Code Playgroud)

暂时忽略Locale的影响,我发现无论舍入如何,我始终都能获得以下输出:

1,000,000,000,000,000,000
Run Code Online (Sandbox Code Playgroud)

我预计:

999,999,999,999,999,993
Run Code Online (Sandbox Code Playgroud)

我尝试更改舍入没有任何效果。为什么NSNumberFormatter坚持四舍五入?

rpe*_*ich 5

NSNumberFormatter在显示之前将数字转换为双精度,所以这不是您想要的。NSDecimalNumber有一种descriptionWithLocale:适合您需求的方法。

看到这个答案:链接