我想以以下方式比较两个双精度数a
和b
C#(例如,b
具有更多的小数位):如果我将数字四舍五入b
到a
i的小数位数,则如果它们相同,则应获得相同的数字。例子:
double a = 0.123;
double b = 0.1234567890;
应该是一样的。
double a = 0.123457
double b = 0.123456789
应该是一样的。
我不能写
if(Math.Abs(a-b) < eps)
因为我不知道如何计算精度eps
。
如果我了解您想要的内容,则可以将小数点前的位数移位,直到“较小”(即,最低有效数字的位数)是整数,然后进行比较:即在某个类中...
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会带来麻烦,因为double可以存储比int更大的数字。这个更好:
while((a-Math.Floor(a))>0 && (b - Math.Floor(b))>0)
//...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句