正确使用std :: cout.precision() – 不打印尾随零

我看到很多关于浮点数的精确数字的问题,但是我特别想知道为什么这个代码

#include <iostream> #include <stdlib.h> int main() { int a = 5; int b = 10; std::cout.precision(4); std::cout << (float)a/(float)b << "\n"; return 0; } 

显示0.5 ? 我期望看到0.5000 。 是因为原始的整数数据types吗?

 #include <iostream> #include <stdlib.h> #include <iomanip> int main() { int a = 5; int b = 10; std::cout << std::fixed; std::cout << std::setprecision(4); std::cout << (float)a/(float)b << "\n"; return 0; } 

您需要将std::fixed操纵器传递给cout以显示尾随零。

std::cout.precision(4); 告诉使用的最大位数不是最小值。 这意味着,例如,如果你使用

 precision 4 on 1.23456 you get 1.234 precision 5 on 1.23456 you get 1.2345 

如果你想在任何时候都得到n位数字,你将不得不使用std::fixed

行为是正确的。 该参数指定了要使用的最大有意义的数字量。 这不是最低限度。 如果只跟随零,则不打印它们,因为小数部分末尾的零不是有意义的。 如果你想打印零点,那么你需要设置适当的标志:

 std::cout.setf(std::ios::fixed, std::ios::floatfield); 

这将符号设置为“固定”,打印所有数字。