工作爬坑系列之BigDecimal控制台报no exact representable decimal result
报错代码
BigDecimal num1 = new BigDecimal(2);
BigDecimal num2 = new BigDecimal(6);
/**这里链式编程有些长,简单说明一下
*这里先做一下除法num1/num2
*然后乘100保留两位小数
*最后转成字符串
*/
String percent = num1.divide(num2).multiply(BigDecimal.valueOf(100)).setScale(2).toPlainString();
报这个错的原因呢是因为你在除法的时候没有考虑超出2位小数后的处理方法,例如0.66666,程序并不知道你是四舍还是五入.
修改后代码
BigDecimal num1 = new BigDecimal(2);
BigDecimal num2 = new BigDecimal(6);
/**主要对divide做了修改,加了两个参数
*第二个参数保留4位小数
*第三个参数规定舍去方式
*/
String percent = num1.divide(num2,4,BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100)).setScale(2).toPlainString();
用Double跟Float有时会产生精度丢失的问题,用BigDecimal就可以很好的解决这些问题啦