在此程序中,调试时显示W和x的值都为99,但程序运行时进入的却是第一个if语句。这是因为浮点数的精度问题,在比较时会有误差。
这里可以看出c的值并不是2.46800000000,而是2.4679999352四舍五入出来的。因此浮点数不要直接用==或!=来做比较。
(ps:带小数点的字面量是double而非float,需要用f或F后缀来表明身份)
对x赋值99.1,电脑中的值是99.09999999994。
对于问题的解决,a==b我们可以改用fabs(a-b)<1e-8或者更小的数。
最开始的代码可以改为
整数在电脑里是纯二进制数,但浮点数是编码的形式。
当运算元角分之类的问题时,不要用元做单位使用double类型,而是用分做单位使用整型,int类型的数据是精确的。