· 计算机使用二进制运算,程序中的十进制数字先转换为二进制,再进行运算。Float和Double的小数部分在转换为二进制时容易产生无限循环的情况,通常都是取无限接近于原值的近似值,所以导致出现精度丢失的情况。
·在金融、工程、科学等领域,对计算数值的精度要求较高时,为了避免计算不精准,往往采用BigDecimal+字符串来解决精度丢失的问题。
BigDecimal d1 = new BigDecimal(“0.1”);
BigDecimal d2 = new BigDecimal(“0.2”);
BigDecimal d3 = d1.multiply(d2);//计算0.1✖️0.2的精确值
double result = d3.doubleValue();//获取double类型的结果