我看到很多关于浮点数的精度数的问题,但具体来说我想知道为什么这个代码
#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
。
是因为原始的整数数据类型吗?
答案 0 :(得分:22)
#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
才能显示尾随零。
答案 1 :(得分:3)
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
。
答案 2 :(得分:1)
行为是正确的。参数指定要使用的最大有意义的位数。这不是最低限度。如果仅跟随零,则不会打印它们,因为小数部分末尾的零没有意义。如果你想打印零,那么你需要设置适当的标志:
std::cout.setf(std::ios::fixed, std::ios::floatfield);
这会将符号设置为“fixed”,它会打印所有数字。