Shi*_*ngh 3 c++ floating-point types
为什么会发生这种行为?第六位之后的小数在 double 中递增到下一位,但在转换为 int 时不递增。
转换为 int 时会引起问题,因为尽管打印 3,d1 在转换为整数时仍然转换为 2 而不是 3
double d1 = 2.999999; //6 digits after decimal
double d2 = 2.777777;
double d3 = 2.77777; //5 digits after decimal
double d4 = 2.99999;
cout<<d1<<endl; //gives 3
cout<<(int)d1<<endl; //still gives 2 not 3
cout<<d2<<endl; //gives 2.777778
cout<<d3<<endl; //gives 2.77777 as expected
cout<<d4<<endl; //gives 2.99999 as expected
Run Code Online (Sandbox Code Playgroud)
我假设它必须与编译器或精度有关,但我不确定这种意外行为。请帮忙
小智 5
这是因为 的默认精度cout是 6。编译器能够足够准确地识别所有值,但输出会四舍五入到小数点后 6 位。如果你想要准确的结果,你可以像这样更改代码:
cout << setprecision(7);
double d1 = 2.999999; //6 digits after decimal
double d2 = 2.777777;
double d3 = 2.77777; //5 digits after decimal
double d4 = 2.99999;
cout<<d1<<endl; //gives 2.999999
cout<<(int)d1<<endl; //still gives 2 not 3
cout<<d2<<endl; //gives 2.777777
cout<<d3<<endl; //gives 2.77777 as expected
cout<<d4<<endl; //gives 2.99999 as expected
Run Code Online (Sandbox Code Playgroud)