跳转至

为什么不能用BigDecimal的equals方法做等值比较?

面试回答

面试官: BigDecimalequals 做等值比较有什么坑?

你: 坑在 equals 不光比数值,还比精度(标度)。比如 1.01.00,数值一样,但一个标度1,一个标度2,equals 直接判 false。金额比较,我们只关心数值,不关心小数点后有几位零,所以要用 compareTo,只比数值,标度忽略。

此外还有一个坑:new BigDecimal(0.1)new BigDecimal("0.1")equals 也大概率不等,因为 double 构造的 0.1 实际存的是近似值 0.10000000000000000555… 标度还巨大。所以使用 BigDecimal 时最好用字符串构造。

deepseek_mermaid_20260612_9bbd67.png