我看到很多关于浮点数精度的问题,但是我特别想知道为什么这段代码
#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
std::cout.setf(std::ios::fixed, std::ios::floatfield);
这将把符号设置为“fixed”,打印所有数字。
fixed
和 floatfield
,特别是 floatfield
。是否有其他方法可以实现它?例如 std::cout.setf(std::ios::right);
相当于 std::cout << std::right;
。 - Abhishek Manestd::cout<<std::fixed;
你所解释的是通过使用 showpoint
实现打印尾随零。 - Abhishek Mane
1.234
或1.2345
,而是会将最后一位数字四舍五入并打印1.235
和1.2346
。 - Natarich J