【问题标题】:how to round off float after two place decimal in c or c++如何在c或c ++中在小数点后两位四舍五入
【发布时间】:2018-10-01 20:23:47
【问题描述】:

如何在 c 或 c++ 中将浮点值四舍五入到小数点后两位

例子:

  1. 让输入是95.346789 所以输出是95.35

  2. 让输入95.345输出为95.35

  3. 让输入95.344输出为95.34

【问题讨论】:

  • 只是:round(f * 100) / 100
  • 你真的需要舍入它(如果是,为什么?),或者只是为了显示它舍入?
  • 尽可能避免浮动。你实际上不能按照你的要求做,因为 100.01 不能用浮点数表示。如果可能,请使用整数进行计算。
  • @DimChtz 如果您有答案并且问题不是离题/重复,请考虑发布作为答案。
  • 你不能,因为浮点数没有小数位。它有二进制位,它们与小数位不可通约。

标签: c++ c++11 floating-point rounding precision


【解决方案1】:

在 C 中:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[])
{
    float num;
    char buf[10];
    printf("Enter float value: ");
    fgets(buf, 10, stdin);
    sscanf(buf, "%lf", &num):
    num = (roundf(num * 100.0) / 100.0);
    printf(num = %.2f\n", num);
}

【讨论】:

  • 此答案中的代码不正确,因为当浮点运算不是基于十进制时,乘以 100 会导致舍入错误,除以 100 也是如此。转换为两位小数的正确方法digits 是使用具有合适格式规范的格式化操作(例如 C 的 snprintf 或 C++ 的插入运算符)。但是,即使这样也需要正确的实现格式,而 C 和 C++ 标准并不能完全保证这一点。除非实现值得信赖,否则必须使用扩展精度技术。
【解决方案2】:

如下所示。希望其可以理解。 输出:https://www.ideone.com/EnP40j

#include <iostream>
#include <iomanip>
#include <cmath>

int main()
{
   float num1 = 95.345f;
   float num2 = 95.344f;

   num1 = roundf(num1 * 100) / 100; //rounding two decimals
   num2 = roundf(num2 * 100) / 100; //rounding two decimals

   std::cout << std::setprecision(2) << std::fixed
             << num1 << " " << num2 << std::endl;
   return 0;
}

【讨论】:

  • @JeJo 不。无论什么语言,问题都是一样的。无论编程语言如何,由于我的评论中所述的原因,这个问题的格式不正确,这不是特定于语言的。
  • 此答案中的代码不正确,因为当浮点运算不是基于十进制时,乘以 100 会导致舍入错误,除以 100 也是如此。转换为两位小数的正确方法digits 是使用具有适当格式规范的格式化操作(例如 C 的 snprintf 或 C++ 的插入运算符)。但是,即使这样也需要正确的实现格式,而 C 和 C++ 标准并不能完全保证这一点。除非实现值得信赖,否则必须使用扩展精度技术。
猜你喜欢
  • 1970-01-01
  • 2010-09-20
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
相关资源
最近更新 更多