【问题标题】:Changing number precision改变数字精度
【发布时间】:2010-06-18 13:25:29
【问题描述】:

您将如何更改数字的精度,例如:float n = 1.2345 并将其存储回变量“n”并将其更改为1.23

【问题讨论】:

  • 听起来您可能在问如何对数字进行四舍五入?如果你搜索它,你会发现很多以前的问题。
  • 您要对数字进行舍入还是截断?当 n = 1.246 时会发生什么?
  • 是的,将数字截断并放回变量'n'。

标签: c++


【解决方案1】:
float n = 1.2345;
int scaled = n * 100
n = static_cast<float>(scaled)/100.0;

或一行:

n = static_cast<float>( static_cast<int>(n*100) ) / 100;

【讨论】:

    【解决方案2】:
    #include <cmath>
    
    n = roundf(n * 100.0f) / 100.0f;
    

    或者如果您需要截断而不是舍入:

    n = truncf(n * 100.0f) / 100.0f;
    

    【讨论】:

    • 请注意:这会舍入浮点数而不是截断它,这可能是也可能不是 Dave18 正在寻找的。​​span>
    • @Bill:确实 - 我正在更新它以包括在您添加评论的同时截断的可能性。 ;-)
    【解决方案3】:

    看看这个问题:

    Rounding Number to 2 Decimal Places in C

    但是,在 C++ 中,如果您需要对数字进行四舍五入,我不会使用 printf,而是使用流运算符:

    using namespace std;
    cout << setiosflags(ios::fixed) << setprecision(2);
    cout << n;
    

    【讨论】:

    • 奇怪的是,当它是唯一提到显示目的的答案时,这被否决了,这很可能是 OP 的用例! +1。
    • @Jefromi :是的,不知道为什么它被否决了。我希望投反对票的人能做出解释。感谢支持!
    【解决方案4】:

    float truncated = static_cast&lt;int&gt;(n * 100) / 100.0f 应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多