我看到很多关于浮点数精度数的问题,但我特别想知道为什么这段代码
#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
。是因为原始的整数数据类型吗?
我看到很多关于浮点数精度数的问题,但我特别想知道为什么这段代码
#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
。是因为原始的整数数据类型吗?
#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.235
precision 5 on 1.23456 you get 1.2346
如果您想n
始终获取数字,则必须使用std::fixed
.
行为是正确的。该参数指定要使用的最大有意义的位数。这不是最低要求。如果后面只有零,则不会打印它们,因为小数部分末尾的零没有意义。如果要打印零,则需要设置适当的标志:
std::cout.setf(std::ios::fixed, std::ios::floatfield);
这会将表示法设置为“固定”,它会打印所有数字。