为什么0.3 - (3*0.10)= 5.4411512312578E-17?

use*_*012 -1 c#

我真的很困惑.我的代码:

        Console.WriteLine(myChanges + " TEN METHOD " +  (ten_num * TEN));(This for debug)
        if ((myChanges - (ten_num * TEN)) >= 0)
        {

        }else
            print error message
Run Code Online (Sandbox Code Playgroud)

就像myChannges = 0.3; TEN = 0.1; ten_num = 3,但是当我打印时(myChanges - (ten_num * TEN)) 它等于5.4411512312578E-17

为什么不是0?有解决方案吗

Tar*_*rik 11

这是由于浮点运算固有的舍入误差.有关详细信息,请参见http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html.