首页 > 解决方案 > 如何将 C++ 中的浮点数截断为 2 位小数?

问题描述

我不知道如何让这个函数返回float两位小数。

    float calcPrice(float a, float b, string x) {
        if (x == "X") return (a - b) * 7.5;
        else return (a - b) * 9.75;
    }

标签: c++visual-studio

解决方案


你不能“截断”一个浮点数。浮点数没有“小数位”之类的东西。您在代码中输入的内容只是为了方便,浮点数的二进制表示完全不同:https ://en.wikipedia.org/wiki/Single-precision_floating-point_format

如果您想以任何方式显示浮点数,您仍然可以使用 printf 等函数对其进行格式化(请记住,它是格式化后的字符串,而不是浮点数)。

printf("%.2f", foobar);    // prints out foobar with 2 digits

还建议不要使用浮点数进行货币计算。由于尺寸小,浮点数变得不精确(即使双精度和其他浮点格式最终会耗尽精度)。更不用说浮点数容易出现舍入错误(同样是由于它们的大小有限)。这些错误累积得很快。

对于货币计算,您可以使用定点数学。使用定点数学,您确实固定的小数位数,并且实现类似于基本整数数学。你只需要照顾好携带。

有关定点数学的更多信息,请参见此处: C 编程中的定点算术


推荐阅读