#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float f = 17793.03;
cout.setf(ios::fixed|ios::showpoint);
cout<<setprecision(3);
cout<<f<<endl;
}
结果 17793.029
我曾经使用过Python,但我不知道为什么会这样。 感谢
答案 0 :(得分:0)
可能因为数字17793.03无法编码,所以编译器将其舍入为最接近的可编码浮点数。试试双重
[EDIT] float以32位编码,64位加倍。因此它们具有“双精度”,因此更精确
答案 1 :(得分:0)
在C ++中,浮点文字默认为double类型。 如果您这样做:
float f = 17793.03; // implicit type conversions happen, 17793.03 is a double
您正在为浮点运算一个double,这可能会导致精度损失,也可能不会导致精度损失,编译器会显示警告。
如果需要float类型的浮点字面值,则必须使用后缀f或F.
编译器不能只将表示值17793.03的位复制到float f中。相反,它需要将双17793.03转换为浮点数。
你可能想要这个:
float f {17793.03F}; //float values typically have 7 digits of precision
cout << std::fixed << std::setprecision(2) << f << std::endl;
// Result: 17793.03
如果您需要更高的精确度,请使用双打:
double d {17793.03}; // typically have 16 digits of precision
cout << std::fixed << std::setprecision(3) << d << endl;
// Result: 17793.030
现在这里有一个有趣的事情:在引擎盖下,Python浮点类型是双倍的。