ios - 在 ios 中四舍五入小数

标签 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 中的“四舍五入”吗。

最佳答案

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

所以您并没有因为糟糕的代码而受苦,只是因为变量不精确。

关于ios - 在 ios 中四舍五入小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12293754/

相关文章:

swift - 有没有办法访问当前语言使用的零?

ios - 深层链接到 Facebook Messenger

ios - 贴纸包扩展加载到 iPhone 7 的模拟器上,而不是 7+ 或 iPad pro?

ios - Firebase 云消息传递通知不发送 iOS 负载格式

objective-c - nsnumberformatter numberfromstring 返回 nil

ios - 在 iOS 和 Swift 中使用 NSNumberFormatter 获取语言环境

ios - 在 Swift 中将 JSON 字符串转换为 Object 的简单而干净的方法

ios - UIScrollView 和问题设置 UIPageControl 的当前页面

swift - NSNumberFormatter 货币 : "plusSign" replaces currency

ios - 货币数字格式化程序 - 当数字为整数时省略小数部分