kar*_*ran 10 nsnumberformatter ios
NSNumberFormatter *format = [[NSNumberFormatter alloc]init];
[format setNumberStyle:NSNumberFormatterDecimalStyle];
[format setRoundingMode:NSNumberFormatterRoundHalfUp];
[format setMaximumFractionDigits:2];
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]];
NSLog(@"%@",temp);
Run Code Online (Sandbox Code Playgroud)
我需要将六位小数除以二进制数.在iOS中,我尝试了上面的代码.当我输入23.45时,我得到答案23.5,但当我输入23.445时答案是23.44.
有人可以在iOS中清理"向上一半".
NJo*_*nes 20
有趣的是,至少对我来说,这是一个浮动精度问题.正如rdelmar在评论中所建议的那样.
至少在这种精度水平下,通过使用双精度可以避免这个问题.例如:
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
Run Code Online (Sandbox Code Playgroud)
所以你没有遭受糟糕的代码,只是不精确的变量.
| 归档时间: |
|
| 查看次数: |
7178 次 |
| 最近记录: |