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。
这具有高精度,旨在按您预期的方式工作(用于财务计算等)。
试试吧! :-)
我需要对 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。 这具有高精度,旨在按您预期的方式工作(用于财务计算等)。
试试吧! :-)