我尝试将计算结果分配给变量,然后将其打印出来。但是,根据分配给它的变量的类型,结果会有所不同。但意外结果仅发生在此特定计算的某些值上。
int main() {
// anything above 64.02 give unexpected results
// e.g. (100.02 - 100.0) * 100.0
int a ((64.02 - 64.0) * 100.0);
double b ((64.02 - 64.0) * 100.0);
cout<<"result: "<<a<<endl; // result: 1, expected result: 2
cout<<"result: "<<b<<endl; // result: 2, expected result: 2
// anything below 64.02 give right results
int c ((63.02 - 63.0) * 100.0);
double d ((63.02 - 63.0) * 100.0);
cout<<"result: "<<c<<endl; // result: 2, expected result: 2
cout<<"result: "<<d<<endl; // result: 2, expected result: 2
return 0;
}
我知道这个问题非常具体,但我怀疑它与隐式类型转换有关。但为什么只有值> = 64.02?
这是我关于堆栈溢出的第一个问题,请不要-1我!!!
答案 0 :(得分:1)
64.02表示为浮点实际上是64.01999664306640625。计算后得到1.999664306640625,向下舍入到int时为1。
63.02表示为63.020000457763671875,在计算后给出2,向下舍入为int。
某些数字不能完全以float或double的形式存储。