如何让 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