BigDecimal小数精确度问题
BigDecimal 使用过程中因为初始化方式导致小数的精度问题
一、BigDecimal的初始化方法:
1、默认的构造函数:new BigDecimal();
2、BigDecimal封装的方法:BigDecimal.valueof();
二、初始化及打印结果示例
通过new的方式创建BigDecimal对象,及调用BigDecimal的构造器,具体有如下构造器:
通过valueof的方法的区别在于 以double为例:
public static BigDecimal valueOf(double val) {
// Reminder: a zero double returns '0.0', so we cannot fastpath
// to use the constant ZERO. This might be important enough to
// justify a factory approach, a cache, or a few private
// constants, later.
return new BigDecimal(Double.toString(val));
}
入参为double类型的重载方法本质上只是将double类型的参数转为了String类型,再调用BigDecimal的构造器。只是这样的一步转换有什么样的影响呢,有以下两个例子:
1、现定义两个double类型的参数 50 、50.1
首先通过new BigDecimal(0的方式给对象赋值,预计打印结果应为50、50.1
BigDecimal number;
// 初始化待转换double类型数据
double doubleConvert1 = 50;
double doubleConvert2 = 50.1;
// 分别打印
number =