可以这样做吗?
double doubleVariable=0.0;
if (doubleVariable==0) {
...
}
或者这个代码会遇到潜在的舍入问题?
可以这样做吗?
double doubleVariable=0.0;
if (doubleVariable==0) {
...
}
或者这个代码会遇到潜在的舍入问题?
如果您只是与0进行比较,那么它是完全合法的,因为比较的右侧将自动转换为加倍。另一方面,如果您要与== 0.10000001进行比较,它将产生所有舍入误差
你更好或阅读有关浮动到0比较的讨论: 将浮点值的相等性检查为0是否安全?
关于浮动的奇怪精度问题,这个讨论也非常有用: 为什么这个问题的结果不同?
即以下将产生错误:
double d1 = 1.000001; double d2 =0.000001;
Console.WriteLine((d1-d2)==1.0);
你有什么 0
,这是一个整数字面值。它被隐式转换为double,你可以用double literal表示 0.0
(隐式转换)。然后是两个双打之间的比较。舍入错误可能导致 doubleVariable
不等于 0.0
(通过其他一些数学运算,你可能会做,而不仅仅是设置它),但在将整数0转换为double时,永远不会出现舍入错误。你在那里的代码是完全安全的,但我赞成 == 0.0
代替。
尝试:
if (double.Equals(doubleValue, 0.0)){}
如果你只是将一个双变量与0.0(或0)进行比较,我相信这样做是安全的,因为我认为0可以用浮点表示,但我不是100%肯定。
通常,建议的比较浮点数的方法是选择一个“delta”值,如果它们的差值小于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)
将失败。在这种情况下你可能会遇到问题。