【问题标题】:C# double subtractionC# 双减法
【发布时间】:2015-10-27 19:29:44
【问题描述】:

我需要对 double 类型的变量做一些工作,在计算中我遇到了一些我不理解的东西。我知道浮点类型并不精确,但它的精度足以满足我的需要。

首先,我将 200 的值乘以 1.1 的乘数,得到 220.00000000000003,这是预期的并且足够接近 220 然后我从期望值中减去它(220)。结果应该是 0 或非常接近 0。相反,我得到了我无法解释的 -2.8421709430404007E-14

using System;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            double u = 200;
            double v = 1.1;
            double x = u * v;
            double y = 220;
            double z = y - x;

            Console.WriteLine(u + " * " + v + " = " + x);

            Console.WriteLine(y + " - " + x + " = " + z);

            Console.ReadLine();
        }
    }
}

有什么想法吗?

【问题讨论】:

  • -2.8421709430404007E-14 接近于零(即将小数点向左移动 14 次 )。
  • -2.8421709430404007E-14 表示-2.84 * 10 ^ -14。真的很近。有关Scientific notation的更多信息
  • 请学习科学记数法。
  • 换句话说,结果非常接近(但不完全)-0.00000000000003
  • 非常接近于 0。

标签: c# double subtraction


【解决方案1】:

这是一个非常接近于 0 的数字。它是科学记数法; E-14 表示 10^-14。换句话说,将小数点左移 14 位。

有些库可以让浮点运算更直观一些;否则,您需要找出并测试公差,以查看您是否“足够接近”。

【讨论】:

    【解决方案2】:

    您应该考虑使用“十进制”类型 - 您的代码看起来像 C#.net。 这具有很高的精度,旨在按照您的预期工作(用于财务计算等)。

    试一试! :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2021-07-20
      相关资源
      最近更新 更多