『Java 语法基础』3 * 0.1 == 0.3 将会返回什么?true 还是 false?
false,因为有些浮点数不能完全精确的表示出来。
由于浮点数在计算机中的表示通常是近似值,3 * 0.1
实际上可能不会精确等于 0.3
。这是因为二进制浮点数最为常用的表示格式(IEEE 754)通常无法精确表示一些十进制数。执行 3 * 0.1 == 0.3
在 Java 中很可能会返回 false
,因为两边计算得到的二进制表示有细微的差异。为了准确的比较浮点数,通常应该使用一个非常小的误差值来确定两个浮点数是否 “相等”。例如:
double a = 3 * 0.1;
double b = 0.3;
double epsilon = 0.0001; // 定义一个很小的误差范围
boolean areEqual = Math.abs(a - b) < epsilon; // 比较是否在误差范围内相等
输出结果:
true
在操作金融计算等对精度要求非常高的场合,应避免使用 float
和 double
类型,而是使用 BigDecimal
类。
完整代码可在此查阅:GitHub