标准::cout 不打印预期的浮点数

Std::cout not printing expected float?

本文关键字:浮点数 打印 cout 标准      更新时间:2023-10-16

这确实是一个基本问题,我正在测试 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

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

编译

时可评估常量表达式500000 / 1000000将以整数算术计算,这实际上意味着任何余数都被丢弃。(请注意,/ 的优先级高于 <<,因此首先评估除法)。

一个明显的记忆是将其中一个参数提升到浮点数(然后编译器会自动提升另一个参数)。我总是选择第一个向代码的读者发出信号,表明你知道你在做什么:

500000.0 / 1000000