正确使用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);
这将符号设置为“固定”,打印所有数字。