在ios中舍入小数部分

时间:2012-09-06 05:56:33

标签: ios nsnumberformatter

NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]];
NSLog(@"%@",temp);

我需要将六位小数舍入到小数点后两位。在iOS中,我尝试了上面的代码。当我输入23.45时,我得到答案23.5,但当我输入23.445时答案是23.44。

有人可以在iOS中清理“向上一半”。

1 个答案:

答案 0 :(得分:19)

有趣的是,至少对我而言,浮点精度问题。正如rdelmar在评论中所建议的那样。

至少在这种精确度下,使用double可以避免这个问题。例如:

NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
[format setMinimumFractionDigits:2];

// With Float:
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithFloat:23.445]]); // Float
// Logs 23.44
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithDouble:23.445]]); // Double
// Logs 23.45

所以你没有遭遇错误的代码,只是不精确的变量。