双随机添加0.000000000000001

时间:2013-11-06 05:00:52

标签: 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;
    }
}

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

  • 获得8
  • 获得5
  • 获取1

它增加0.000000000000001。为什么呢?

1 个答案:

答案 0 :(得分:5)

很像1/3使用十进制表示法(0.333333 ...)无法用完全表示,0.1无法将完全表示为浮点数数字,内部使用二进制表示法(aka IEEE-754)。这就是你得到这个固有错误的原因。