在C#中比较两个具有不同小数位数的双精度数

时间:2014-07-31 13:47:53

标签: c# precision double-precision

我想比较C#中的两个ab(其中例如b有更多小数位数)的方式:如果我舍入数字{{1} } {小于b的小数位数如果它们相同则应该得到相同的数字。例如:

a

应该是一样的。

double a = 0.123;
double b = 0.1234567890;

应该是一样的。

我不能写

double a = 0.123457
double b = 0.123456789

因为我不知道如何计算精度if(Math.Abs(a-b) < eps)

2 个答案:

答案 0 :(得分:1)

如果我理解了你想要的东西,你可以将小数位前的数字移到&#34;较小的&#34; (即一个具有最低有效数字的)是一个整数,然后比较: 即在某个班级...

static bool comp(double a, double b)
{
    while((a-(int)a)>0 && (b - (int)b)>0)
    {
        a *= 10;
        b *= 10;
    }
    a = (int)a;
    b = (int)b;
    return a == b;
}

修改

显然在双倍上调用(int)x会产生麻烦,因为double可以存储比int更大的数字。这样更好:

while((a-Math.Floor(a))>0 && (b - Math.Floor(b))>0)
//...

答案 1 :(得分:0)

double有epsilon double.Epsilon或者设置首选的hardcode错误,f.e。 0.00001