2012-09-06 82 views
7
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中舍去小数部分

是否有人可以在iOS中清除“倒数半”。

+0

但我得到正确答案输入23.45 23.45。 – Aravindhan

+1

我怀疑这与浮游物在计算机中的表现方式有关。您可能输入23.445,但在内部,它可能被表示为类似23.4449999的值,因此它被舍入。 – rdelmar

回答

17

有趣的是,至少对我来说,它浮点精度问题。正如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 

所以你没有遭受糟糕的代码,只是不精确的变量。

+0

thaks它的工作.. – karan