【问题标题】:Round floating point:Print exactly two digits after the decimal point rounded to the nearest decimal place四舍五入浮点数:精确打印小数点后两位数,四舍五入到最接近的小数位
【发布时间】:2015-09-20 07:36:36
【问题描述】:

我们如何在 C/C++ 中对浮点数进行四舍五入,以精确打印小数点后的两位数,四舍五入到最接近的小数位? 比如说,当我使用时,

printf("%.2f", 12.555);
cout<<fixed<<setprecision(2)<<12.555<<endl;

我明白了,

12.55
12.55

但我需要输出为,

12.56
12.56

【问题讨论】:

标签: c++ c floating-point


【解决方案1】:

问题在于 12.555 的实际双精度值是

12.55499999999999971578290569595992565155029296875000

因此,当您将其四舍五入到小数点后 2 位时,它会向下舍入到 12.55。你真的无能为力。

【讨论】:

    【解决方案2】:

    C 或 C++ 不关心您需要什么。

    12.555 不是二进制浮点数。二进制浮点数都是整数乘以或除以 2 的幂。 12.555 不是这样的数字。所以当你写 12.555 时,你得到的是最接近 12.555 的浮点数。它可能小于或大于 12.555,并且将正确四舍五入为 12.55 或正确四舍五入为 12.56。

    计算x * 1000和round (x * 1000),得到12555。如果x * 1000非常接近round (x * 1000)并且round (x * 1000)的最后一位是奇数,则增加它除以 1。除以 10,再四舍五入,除以 100。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多