『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

在操作金融计算等对精度要求非常高的场合,应避免使用 floatdouble 类型,而是使用 BigDecimal 类。

完整代码可在此查阅:GitHub

posted @ 2024-03-18 00:56  BNTang  阅读(191)  评论(0编辑  收藏  举报