双随机添加0.000000000000001

Jon*_*Jon 0 c# floating-point double ieee-754 floating-point-precision

我有这个代码:

double timeTillTick = 15.0;
private void lower_Tick(object sender, EventArgs e)
{
    if (timeTillClear > 0)
    {
        timeTillClear -= 0.1;
        clearingIn10SecondsToolStripMenuItem.Text = "Clearing in " + timeTillClear + " seconds.";
    }
    else
    {
        lower.Enabled = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

每100毫秒降低一次滴答.当它:

  • 获得8
  • 得到5
  • 获得1

它增加了0.000000000000001.为什么?

mvp*_*mvp 5

很像1/3不能表示恰好使用十进制表示法(0.333333 ...),0.1不能表示恰好为浮点数,其在内部使用二进制表示法(又名IEEE-754).这就是你得到固有错误的原因.