我试图拥有一个最大精度为 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);
没有什么可以将舍入模式设置为“无”。我还能做什么来维护十进制样式格式以及修剪的十进制数字?任何帮助将不胜感激。谢谢。
以下对我有用:
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
。
你可以用这个
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setRoundingMode:NSNumberFormatterRoundDown];
[numberFormatter setMaximumFractionDigits:2];
NSString *numberAsString = [numberFormatter stringFromNumber:[NSNumber numberWithDouble: 123456.9964]];
NSLog(@"%@", numberAsString);
[numberFormatter setRoundingMode: NSNumberFormatterRoundDown];
使用此代码。
在 Swift 5 中:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .down
print(formatter.string(from: NSNumber(25.99))!)
打印 25.99
你也可以只使用 round() 然后将其转换为字符串
var y = round(100 * 123456.8864) / 100
var x:String = String(format:"%.2f", y)
println("x: \(x)")
将打印 x: 123456.89,将 8 舍入为 9。