我需要对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 :(得分:2)
这是一个非常接近0的数字。它的科学记数法; E-14表示10 ^ -14。换句话说,将小数点向左移动14个位置。
有些库可以使浮点运算更加直观;否则,你需要弄清楚并测试容差,以确定你是否足够接近。"
答案 1 :(得分:0)
你应该考虑使用"十进制" type - 您的代码看起来像C#.net。 这具有很高的精度,可以按照您的预期工作(用于财务计算等)。
试一试! : - )