【问题标题】:Std::cout not printing expected float? [duplicate]Std::cout 不打印预期的浮点数? [复制]
【发布时间】:2017-06-02 19:25:32
【问题描述】:

这是一个非常基本的问题,我正在测试 std::cout 以打印浮点数,以下工作正常:

std::cout<<10 / 3.2<<std::endl; //Output: 3.125

但是当我尝试时:

std::cout<< 500000 / 1000000<<std::endl; //Output: 0

为什么我的第二个示例的输出不是 0.5?这是自动四舍五入吗?

我正在使用g++ -std=c++14进行编译

【问题讨论】:

  • 因为那不是浮点数。
  • 500000 / 1000000 不是 float 表达式,它是 int 表达式。使其成为带有演员表的float,或通过将.0 添加到一个或两个数字来使其成为double
  • 两个操作数都是整数,所以你只需进行整数除法。强制一个操作数浮动或加倍以进行双重操作。

标签: c++ floating-point


【解决方案1】:

在您的第二个代码示例中,5000001000000 都具有整数类型,因此,当您将一个除以另一个时,您有整数除法(结果是圆底),即 0。要解决此问题,请尝试将它们乘以 1.0 或强制转换为任何浮点类型。

【讨论】:

  • 谢谢,有道理。
  • 在 16 位 int 的平台上,它们可能不是 ints。这就是为什么我在回答时很小心,不谈论具体类型。
  • @Bathsheba 你说得对
  • 好多了。投赞成票。
【解决方案2】:

编译时可求值常量表达式500000 / 1000000 将在整数算术中求值,这实际上意味着任何余数都将被丢弃。 (请注意,/ 的优先级高于 &lt;&lt;,因此首先计算除法)。

一个明确的补救方法是将其中一个参数提升为浮点数(另一个然后由编译器自动提升)。我总是选择第一个来向您的代码读者表明您知道自己在做什么:

500000.0 / 1000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多