问题思考:
- 高精度计算时你准备用什么方法来实现?
- 要你计算涉及到金钱问题时你准备怎样来实现?
- 你的方法会造成精度损失吗?
- 对于此你有其他办法吗?
相信很多没有接触过BigDecimal的人来说,肯定是想着用double啊flot精度搞得数据类型来实现需求,可这样行吗?我们试试看吧!
double a = 0.09;
double b = 0.05;
System.out.println(a - b);//0.039999999999999994
float a1 = 0.09f;
float b1 = 0.04f;
System.out.println(a1 - b1);//0.050000004
很显然造成了精度的损失,并没有得到我们想要的结果,那当我们在计算设计到钱的时候差的这一点就很严重了,对于那些大的平台一天上10亿的交易量,那这差的一点将是足够可怕的啊,对于此你有其他解决办法吗?
这里我们就可以使用我们的 BigDecimal 类了,那BigDecimal 可以解决这个问题吗?
BigDecimal bigDecimal = new BigDecimal(0.09);
BigDecimal bigDecimal1 = new BigDecimal(0.05);
BigDecimal add = bigDecimal.add(bigDecimal1);
System.out.println(add);
//0.13999999999999999944488848768742172978818416595458984375
依然照常成精度的损失呢?这里我们要注意 BigDecimal 对象我们要用字符串类型才不会造成精度的损失!
BigDecimal bigDecimal = new BigDecimal("0.09");
BigDecimal bigDecimal1 = new BigDecimal("0.05");
BigDecimal add = bigDecimal.add(bigDecimal1);
System.out.println(add);//0.14
BigDecimal中定义很多的对高精度 运算方法 ,下面我列举常用的加,减,乘,除方法的使用
BigDecimal bigDecimal4 = new BigDecimal("2.105");
BigDecimal bigDecimal5 = new BigDecimal("100");
BigDecimal add1 = bigDecimal4.add(bigDecimal5);
System.out.println(add1);//102.105
BigDecimal subtract2 = bigDecimal4.subtract(bigDecimal5);
System.out.println(subtract2);//-97.895
BigDecimal multiply1 = bigDecimal4.multiply(bigDecimal5);
System.out.println(multiply1);//210.500
BigDecimal divide1 = bigDecimal4.divide(bigDecimal5);
System.out.println(divide1);//0.02105
小结:总的来说BigDecimal的学习还是比较简单的,但我们要知道这有这个东东,不然让搞个关于金钱的app那就完蛋了!希望对你有所帮助。