Java中两个double值的简单比较会产生一些问题.让我们考虑Java中的以下简单代码片段.
package doublecomparision;
final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;
System.out.println("\n"+((a-b)==1.0));
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码似乎返回true,表达式的评估((a-b)==1.0)却没有.它会返回,false因为对此表达式的求值0.9999999999999999实际上是预期的1.0,1.0因此不等于,因此条件求值为boolean false.克服这种情况的最佳方法是什么?
Kev*_*vin 85
基本上你不应该进行精确的比较,你应该这样做:
double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}
Run Code Online (Sandbox Code Playgroud)
Zak*_*deh 11
请使用java.math.BigDecimal,而不是使用双精度来表示十进制arithemetic.它会产生预期的结果.
有关参考,请参阅此stackoverflow问题
小智 5
您可以使用Double.compare ; 它比较两个指定的double值。
| 归档时间: |
|
| 查看次数: |
158027 次 |
| 最近记录: |