回答重点
BigDecimal是Java中提供的一个用于高精度计算的类,属于java.math包。它提供对浮点数和定点数的精确控制,特别适用于金融和科学计算等有高精度需求的领域
主要特点:
- 高精度:BigDecimal可以处理任意精度的数值,而不像float和double存在精度限制
- 不可变性:BigDecimal是不可变类,所有的算术运算都会返回新的BigDecimal对象,而不会修改原有对象(所以要注意性能问题)
- 丰富的功能:提供了加减乘除取余舍入等多种计算方法,并支持各种舍入模式
扩展知识
通常情况下,大部分需要浮点数精确运算结果的业务场景,涉及到钱的场景,都是通过BigDecimal来做的
《阿里巴巴Java开发手册》:阿里巴巴Java开发手册 · Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com)
手册中提到:浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用equals来判断
如何创建BigDecimal对象?
BigDecimal bd1 = new BigDecimal("123.45"); // 推荐,字符串没有精确丢失
BigDecimal bd2 = new BigDecimal(123.45); // 不推荐,double和float会引入精度问题
BigDecimal bd3 = BigDecimal.valueOf(123.45); // 推荐