Java中 Bigdecimal 的学习使用

问题思考:

  1. 高精度计算时你准备用什么方法来实现?
  2. 要你计算涉及到金钱问题时你准备怎样来实现?
  3. 你的方法会造成精度损失吗?
  4. 对于此你有其他办法吗?

Java中 Bigdecimal 的学习使用_第1张图片

 相信很多没有接触过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那就完蛋了!希望对你有所帮助。

Java中 Bigdecimal 的学习使用_第2张图片

你可能感兴趣的:(笔记,java,java-ee)