-
float不能用==来比较
public static void main(String[] args) {
//反例,浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二制无法精确表示大部分的十进制小数
float a = 1.0f;
float b = 0.9f;
float c = 0.8f;
if (a - b == b - c) {
System.out.println(true);
} else {
System.out.println(false);
}
//正例,指定一个误差范围,两个浮点数的差值在此范围之内,则认为是相等的
float d = 1.0f;
float diff = 1e-6f;
if (Math.abs(a - d) < diff) {
System.out.println(true);
}
}
-
Float不能用equals比较
public static void main(String[] args) {
//反例
float a = 1.0f - 0.9f;
float b = 0.9f - 0.8f;
Float x = Float.valueOf(a);
Float y = Float.valueOf(b);
System.out.println(x.equals(y));
//正例
BigDecimal c = new BigDecimal("1.0");
BigDecimal d = new BigDecimal("0.9");
BigDecimal e = new BigDecimal("0.8");
BigDecimal m = c.subtract(d);
BigDecimal n = d.subtract(e);
if (m.equals(n)) {
System.out.println("true");
}
}
//输出
false
true
-
禁止使用构造方法 BigDecimal(double)的方式把 double 值转化为 BigDecimal 对象(防止精度丢失)
//推荐使用
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = BigDecimal.valueOf(0.1);