我想比较C#中的两个a
和b
(其中例如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)
。
答案 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