比较这两个值将导致"真实":
53.9173333333333 53.9173
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 18
如果你想要a = 1.00001并被b = 0.99999认为是平等的:
return Math.abs(a - b) < 1e-4;
Run Code Online (Sandbox Code Playgroud)
否则,如果你想a = 1.00010和b = 1.00019被确定为相等,都a和b为正,而不是巨大的:
return Math.floor(a * 10000) == Math.floor(b * 10000);
// compare by == is fine here because both sides are integral values.
// double can represent integral values below 2**53 exactly.
Run Code Online (Sandbox Code Playgroud)
否则,使用truncate如下所示的方法是否有任何在java中截断double的函数?:
BigDecimal aa = new BigDecimal(a);
BigDecimal bb = new BigDecimal(b);
aa = aa.setScale(4, BigDecimal.ROUND_DOWN);
bb = bb.setScale(4, BigDecimal.ROUND_DOWN);
return aa.equals(bb);
Run Code Online (Sandbox Code Playgroud)
如果您仍然需要这个,这是一个简单的示例:
public static boolean areEqualByThreeDecimalPlaces(double a, double b) {
a = a * 1000;
b = b * 1000;
int a1 = (int) a;
int b1 = (int) b;
if (a1 == b1) {
System.out.println("it works");
return true;
}
else
System.out.println("it doesn't work");
return false;
Run Code Online (Sandbox Code Playgroud)
天真:
if(Math.abs(a-b) < 0.0001)
Run Code Online (Sandbox Code Playgroud)
但是,这不会适用于所有值。只要您使用double,实际上就不可能让它工作,因为它double是作为二进制分形实现的,甚至没有小数位。
您必须将您的值转换为String或BigDecimal对其小数位进行有意义的测试。
您可能需要阅读浮点指南以提高您对浮点值工作原理的理解。
| 归档时间: |
|
| 查看次数: |
26645 次 |
| 最近记录: |