使用BigDecimal四舍五入 计算百分比 (%前端拼一个就好了, 后台不拼接百分号)

 百分比的计算, 一定要用 实体类或map 一定要用 BigDecimal ,  在不需要乘除运算的 , 可以是double.

 使用BigDecimal四舍五入 计算百分比 (%前端拼一个就好了, 后台不拼接百分号)_第1张图片

 

参考如下链接 介绍了BigDecimal 

 https://blog.csdn.net/haiyinshushe/article/details/82721234

实体类, 我们用bigdecimal来接受 来来进行计算    相加 add  相减  subtract   相除divide    相乘multiply

( max1.subtract(min2) ).divide( ).multiply( new BigDecimal("100") );

 ( max1.subtract(min2) )

.divide(  max1.subtract(min1)    , 2, BigDecimal.ROUND_HALF_UP)

.multiply( new BigDecimal("100") );   注意红色部分不需要括号的, 这是 divide自带的一个方法

使用BigDecimal四舍五入 计算百分比 (%前端拼一个就好了, 后台不拼接百分号)_第2张图片

 

 

--数据库是 double(16,2) 或者使用阿里开发手册推荐的 decimal来存储小数, mysql使用double/float会丢失精度, 即便是数据库是 double的, 你在mybatis实体类, 返回值用 BigDecimal来接受并计算比率,很方便

   public static void main(String[] args) {

     BigDecimal num1 = new BigDecimal("12.11111111");
        BigDecimal num2 = new BigDecimal("13.22222222");
        BigDecimal divide = num2.divide(num1, 2, BigDecimal.ROUND_HALF_UP);//两个BigDecimal数相除结果四舍五入保留2为小数



      java.math.BigDecimal bd1 = new java.math.BigDecimal(0.145444444444444444444);//0.15
      String s = bd1.setScale(2, java.math.BigDecimal.ROUND_HALF_UP).toPlainString();
      System.out.println(s);

BigDecimal zero = BigDecimal.ZERO;
        System.out.println(zero);
        BigDecimal bigDecimal = new BigDecimal("100");
        System.out.println(bigDecimal);


      /*BigDecimal在创建的时候可以传入String和double,但是最好使用String,至于原因看看如下代码就知道了:
      BigDecimal b = new BigDecimal("12.000001");
      System.out.println(b);
      BigDecimal c = new BigDecimal(12.01);
      System.out.println(c);

      运行结果为:
      12.000001
      12.0099999999999997868371792719699442386627197265625
      可以看出在传入double的时候精度会丢失。*/
  
}

 

你可能感兴趣的:(基础知识)