【问题标题】:Double randomly adds 0.000000000000001 [duplicate]双随机添加0.000000000000001 [重复]
【发布时间】:2013-11-06 05:00:52
【问题描述】:

我有这个代码:

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。为什么?

【问题讨论】:

  • 我们可以使用decimal来保持浮点数准确(称为定点数)
  • @Aniket 谢谢!我认为 double 是小数。
  • @chipperyman573 double 是浮点十进制,而decimal 是定点十进制。
  • @Aniket decimal 不是定点的。 double 是浮点二进制(base-2),decimal 是浮点十进制(base-10)

标签: c# floating-point double ieee-754 floating-point-precision


【解决方案1】:

就像1/3 不能准确使用十进制表示法(0.333333...)表示,0.1 不能准确表示为浮点数,即内部使用二进制表示法(又名 IEEE-754)。这就是为什么你会得到这个固有的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 2018-09-09
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    相关资源
    最近更新 更多