BigDecimal
是 Java 中提供的一个用于高精度计算的类,属于 java.math 包。它提供对浮点数和定点数的精确控制,特别适用于金融和科学计算等需要高精度的领域。
主要特点:
通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过 BigDecimal 来做的。
《阿里巴巴 Java 开发手册-嵩山版》中提到:浮点数之间的等值判断,它的基本数据类型不能用 == 来比较,它的包装数据类型不能用 equals 来判断。
想要解决浮点数运算精度丢失这个问题,可以直接使用 BigDecimal 来定义浮点数的值,然后再进行浮点数的运算操作即可。
可以通过多种方式创建 BigDecimal 对象:
1)使用字符串(推荐方式,因为字符串可以精确表示数值):
BigDecimal bd1 = new BigDecimal("123.45");
2)使用数值(不推荐,因为 double 和 float 有精度问题)
BigDecimal bd2 = new BigDecimal(123.45); // 可能会引入精度问题
3)使用 BigDecimal.valueOf 方法(推荐方式):
BigDecimal bd3 = BigDecimal.valueOf(123.45);