如何让 69.99*100 打印出 6999 而不是 6998?
how to make 69.99*100 print 6999 instead of 6998?
我想要正确的 6999 但代码打印出 6998,有什么方法可以在 C/C++ 中实现它?
#include <iostream>
using namespace std;
int main() {
double x = 69.99;
int xi = x*100;
cout << xi << endl;
return 0;
}
您的编译器可能正在使用 IEEE 754 double precision floating point format for representing the C++ data type double
. This format cannot represent the number 69.99
exactly. It is stored as 69.989999999999994884
。当您将该值与 100
相乘时,结果略小于 6999
.
当将浮点数隐式转换为整数时,数字总是向零舍入(正数向下舍入,负数向上舍入)。
如果您不想总是将结果四舍五入为零,您可以更改行
int xi = x*100;
至
long xi = lround( x*100 );
它并不总是将数字四舍五入为零,而是始终将其四舍五入为最接近的整数。
请注意,您必须 #include <cmath>
才能使用 std::lround
。
我想要正确的 6999 但代码打印出 6998,有什么方法可以在 C/C++ 中实现它?
#include <iostream>
using namespace std;
int main() {
double x = 69.99;
int xi = x*100;
cout << xi << endl;
return 0;
}
您的编译器可能正在使用 IEEE 754 double precision floating point format for representing the C++ data type double
. This format cannot represent the number 69.99
exactly. It is stored as 69.989999999999994884
。当您将该值与 100
相乘时,结果略小于 6999
.
当将浮点数隐式转换为整数时,数字总是向零舍入(正数向下舍入,负数向上舍入)。
如果您不想总是将结果四舍五入为零,您可以更改行
int xi = x*100;
至
long xi = lround( x*100 );
它并不总是将数字四舍五入为零,而是始终将其四舍五入为最接近的整数。
请注意,您必须 #include <cmath>
才能使用 std::lround
。