像这样将double与0进行比较是否错误:doubleVariable == 0?

| 可以这样做吗?
double doubleVariable=0.0;
if (doubleVariable==0) {
   ...
}
还是此代码可能会遇到舍入问题?     
已邀请:
不,如果您只想与0比较,那是完全合法的,因为比较右边会自动转换为double。另一方面,如果您要与== 0.10000001进行比较,则会产生所有舍入误差。 您更好,还是在这里阅读了有关浮点数与0的比较的讨论:检查浮点值是否等于0是否安全? 此外,该讨论还对浮点数上的怪异精度问题非常有用:为什么该问题的结果不同? 即下面将产生假:
double d1 = 1.000001; double d2 =0.000001;
Console.WriteLine((d1-d2)==1.0);
    
您所拥有的是
0
,这是一个整数文字。它隐式转换为双精度数,您可以用双精度字面量
0.0
表示它(隐式转换)。然后是两个双打之间的比较。舍入错误可能会导致
doubleVariable
不等于
0.0
(通过其他一些数学运算,您可能会做,不仅是对其进行设置),但是将整数0转换为double时永远不会出现舍入错误。您那里的代码是完全安全的,但我宁愿使用
== 0.0
。     
尝试:
if (double.Equals(doubleValue, 0.0)){}
    
如果您只是将double变量与0.0(或0)进行比较,我相信这样做是安全的,因为我认为0可以精确地表示为浮点数,但我不确定100% 。 通常,建议的比较浮点数的方法是选择一个“ delta”值,如果两个double的差小于delta,则您将认为它们相等。这可以处理浮点数的精确表示限制。
double first = 1.234;
double second = 1.2345;
double difference = Math.Abs(first - second);

double threshold = 0.000001; // doubles are equal if their difference is less than this value - you choose this value based on your needs
bool areEqual = difference < threshold;
    
嗯...我认为,只要数字具有精确的二进制小数表示形式(如0),比较就完全有效。     
不应将double用于此类比较。   双重制造问题。 例如
double n1=0.55
double n2=100
,则
double ans=n1*n2
应该是
55.0
但是当您调试ans时是
55.000000000000007
if(ans==55.0)
将失败。在这种情况下,您可能会遇到问题。     

要回复问题请先登录注册