ios中小数点四舍五入

2024-01-07

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 中清理“四舍五入”吗?


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

所以你遇到的并不是糟糕的代码,而是不精确的变量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ios中小数点四舍五入 的相关文章

随机推荐