那肯定就会说上BigDecimal,但是上了BigDecimal就可以高枕无忧了吗?
NO,我之前也以为是这样,但问题才刚刚开始。
废话少说上代码:
public static void main(String[] args) {
Integer i = 100;
Double d = 598.81;
Double c = d * i;
System.out.println(c);
}
输出:
59880.99999999999
public static void main(String[] args) {
Integer i = 100;
Double d = 598.81;
Double c = d * i;
BigDecimal multiply = new BigDecimal(d).multiply(new BigDecimal(i));
System.out.println(multiply);
System.out.println(c);
}
输出:
59880.99999999999454303178936243057250976562500
59880.99999999999
咦~~~,怎么小数点不降反增了,找到BigDecimal文档中查看,原来直接将浮点类型转换为BigDecimal类型会有误差,官方是建议将浮点类型先转为String类型,再转为BigDecimal类型再进行运算才不会出现误差。
public static void main(String[] args) {
Integer i = 100;
Double d = 598.81;
Double c = d * i;
BigDecimal multiply1 = new BigDecimal(d).multiply(new BigDecimal(i));
String a = d.toString();
BigDecimal multiply1 = new BigDecimal(a).multiply(new BigDecimal(i));
System.out.println(a);
System.out.println(c);
System.out.println(multiply);
System.out.println(multiply1);
}
输出:
598.81
59880.99999999999
59880.99999999999454303178936243057250976562500
59881.00
我是时生,一个正在努力的小白。欢迎批评,欢迎指正,欢迎共享。
如果这篇文章对你有帮助,麻烦点个赞呗!