C# 双重减法

C# double subtraction

我需要对 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();
        }
    }
}

有什么想法吗?

这是一个非常接近于0的数字,是科学计数法; E-14 表示 10^-14。也就是说,小数点向左移动14位。

有一些库可以使浮点运算更直观一些;否则,您将需要找出并测试公差,以查看您是否 "close enough."

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

试试吧! :-)