zoukankan      html  css  js  c++  java
  • java BigDecimal的操作

    今天给大家讲一下java中BigDecimal的操作。由于double,float的精度不够,因此在进行商业计算的时候要使用的BigDecimal。BigDecimal对象创建如下:

    BigDecimal b = new BigDecimal("12.000001");
    System.out.println(b);

    输出结果为:12.000001;

    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的时候精度会丢失。

    BigDecimal其他操作如下:

        //加法
        public static BigDecimal add(String num1, String num2) {
            BigDecimal bd1 = new BigDecimal(num1);
            BigDecimal bd2 = new BigDecimal(num2);
            return bd1.add(bd2);
        }
     
        //减法
        public static BigDecimal subtract(String num1, String num2) {
            BigDecimal bd1 = new BigDecimal(num1);
            BigDecimal bd2 = new BigDecimal(num2);
            return bd1.subtract(bd2);
        }
     
        //乘法
        public static BigDecimal multiply(String num1, String num2) {
            BigDecimal bd1 = new BigDecimal(num1);
            BigDecimal bd2 = new BigDecimal(num2);
            return bd1.multiply(bd2);
        }
     
        //除法
        public static BigDecimal divide(String num1, String num2, int i) {
            BigDecimal bd1 = new BigDecimal(num1);
            BigDecimal bd2 = new BigDecimal(num2);
            // i是要保留的位数, BigDecimal.ROUND_HALF_UP 表示四舍五入的规则
            return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);  
        }

    需要强调一下除法,第三个参数为是否四舍五入,

    ROUND_HALF_DOWN表示遇5不进1,即1.5->1;
    ROUND_HALF_UP表示遇5进1,即1.5->2;

    但是有点需要注意:
    当我们使用ROUND_HALF_DOWN
    System.out.println(this.divide("67.75", "5",4));
    System.out.println(this.divide("67.75", "5",1));
    System.out.println("-------");
    System.out.println(this.divide("67.751", "5",4));
    System.out.println(this.divide("67.751", "5",1));
    
    

    运行结果如下:

    13.5500
    13.5
    -------
    13.5502
    13.6
    我就纳闷了,按道理第二个结果应该是13.5啊!怎么成了13.6。后来经过多次测试,想了一下,这个四舍五入不是按照精度位后面移位与5做比较,

    而是按照精度位后的所有的数据与5做比较,也就是说:13.5500精确到一位,则用0.0500与5比较,而13.5502精确到一位,则用0.0502与5比较,

    比5大,所以就向上收。



  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/mouseIT/p/4159292.html
Copyright © 2011-2022 走看看