这是一个非常基本的问题,我正在测试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
答案 0 :(得分:4)
在你的第二个代码示例500000
和1000000
都有整数类型,因此,当你将一个除以另一个时,你有整数除法(结果是圆底),即{{1 }}。要解决此问题,请尝试将它们乘以0
或转换为任何浮点类型。
答案 1 :(得分:2)
编译时可评估常量表达式500000 / 1000000
将以整数运算进行计算,这实际上意味着丢弃任何余数。 (请注意,/
的优先级高于<<
,因此首先评估除法。
一个明确的记忆是将其中一个参数提升为浮点(然后另一个参数由编译器自动提升)。我总是选择第一个向您的代码发信号通知您知道自己在做什么:
500000.0 / 1000000