代码之家  ›  专栏  ›  技术社区  ›  TheWaterProgrammer

如何在不做couts的情况下减少浮点数的小数位数

  •  0
  • TheWaterProgrammer  · 技术社区  · 6 年前

    我有一个浮点数

    float n = 0.948245;
    

    我想把这个数字减少到小数点后1位,应该是0.9。我不想 std::cout 或者把这个号码记录在任何地方。只想把n的值设为 0.9 是的。

    我怎么能这样 C++ 14 是吗?

    附言: 在我发现的所有建议中,所有的都涉及到 STD:: 在浮子上。因此,我声明我不想这样做。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Shalom Craimer    6 年前

    这就是 std::round() std::trunc() 是为了。 标准::trunc() 查找不大于输入的最接近整数。因为您只需要1个小数位,所以在将其传递给函数之前,先乘以10(就像@retired ninja所写的那样):

    float n = 0.948245;
    float result = std::trunc(n*10) / 10.0f;
    

    尽管如此,我还是要提醒你 float 不是很精确。 请参阅中的以下示例 wandbox 以下内容:

    float n = 100000.948245;
    std::cout << n << "\n";
    

    输出为:

    100001
    

    问题是这里分配给 n 既大又有很多小数点后的数字。(顺便说一句,“大”表示 浮动 表示任何远离0到1范围的内容)。

    使用 double 是一个 小的 更好,但如果你真的关心精度,即使是在大量,你最好使用定点数学。你真的必须考虑到你所关心的价值观的范围。