如何避免 NSNumberFormatter 中的四舍五入

问题描述 投票:0回答:5

我试图拥有一个最大精度为 2 位小数的数字字符串,而其余小数只是被修剪掉而不是四舍五入。例如:

I have: 123456.9964

I want: 123456.99 -> Just want to trim rest of the decimal places

我尝试过的是:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle: NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat: 123456.9964]];
 NSLog(@"%@", numberAsString);

没有什么可以将舍入模式设置为“无”。我还能做什么来维护十进制样式格式以及修剪的十进制数字?任何帮助将不胜感激。谢谢。

ios trim nsnumberformatter decimal
5个回答
22
投票

以下对我有用:

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
// optional - [numberFormatter setMinimumFractionDigits:2];
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
NSNumber *num = @(123456.9964);
NSString *numberAsString = [numberFormatter stringFromNumber:num];
NSLog(@"%@", numberAsString);

输出为:123,456.99

您的部分问题是使用

numberWithFloat:
而不是
numberWithDouble:
。您的号码位数太多,
float


1
投票

你可以用这个

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
[numberFormatter setMaximumFractionDigits:2];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble: 123456.9964]];
NSLog(@"%@", numberAsString);

0
投票
[numberFormatter setRoundingMode: NSNumberFormatterRoundDown];

使用此代码。


0
投票

在 Swift 5 中:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .down
print(formatter.string(from: NSNumber(25.99))!)

打印 25.99


-1
投票

你也可以只使用 round() 然后将其转换为字符串

var y = round(100 * 123456.8864) / 100

var x:String = String(format:"%.2f", y)
println("x: \(x)")

将打印 x: 123456.89,将 8 舍入为 9。

© www.soinside.com 2019 - 2024. All rights reserved.