2012-09-06 55 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