【问题标题】:Rounding off decimal fraction in ios在 ios 中舍入小数部分
【发布时间】:2012-09-06 05:56:32
【问题描述】:
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 中清理“四舍五入”吗?

【问题讨论】:

  • 但是我得到了输入 23.45 作为 23.45 的正确答案。
  • 我怀疑这与浮点数在计算机中的表示方式有关。您可能输入了 23.445,但在内部,它可能表示为 23.4449999,因此会向下取整。

标签: ios nsnumberformatter


【解决方案1】:

有趣的是,至少对我而言,它一个浮点精度问题。正如 rdelmar 在 cmets 中所建议的那样。

使用双精度可以避免这个问题,至少在这个精度级别。例如:

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

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

【讨论】:

    猜你喜欢
    • 2015-12-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2020-09-25
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多