std :: cout没有打印预期的浮动?

时间:2017-01-18 12:08:38

标签: c++ floating-point

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

进行编译

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

一个明确的记忆是将其中一个参数提升为浮点(然后另一个参数由编译器自动提升)。我总是选择第一个向您的代码发信号通知您知道自己在做什么:

500000.0 / 1000000