zoukankan      html  css  js  c++  java
  • BigDecimal使用

      java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    初始化BigDecimal对象

    加减乘除

    add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
    subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
    multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
    divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。

    取反

    negate()

    比较

    compareTo(BigDecimal)

    示例:a.compareTo(b)
    a>b 返回1
    a=b 返回0
    a<b 返回-1

    设置小数点精确度

    // 1. ROUND_DOWN(直接省略掉指定位数后的内容)
    BigDecimal bigDecimal = new BigDecimal("2.123456").setScale(2, BigDecimal.ROUND_DOWN);
    System.out.println("ROUND_DOWN:" + bigDecimal);//2.12
    
    // 2. ROUND_UP(直接对指定位数后的内容做进一位处理)
    BigDecimal bigDecimal2 = new BigDecimal("2.125456").setScale(2, BigDecimal.ROUND_UP);
    System.out.println("ROUND_UP:" + bigDecimal2);//2.13
    
    // 3. ROUND_CEILING(正数使用ROUND_UP 规则,负数使用ROUND_DOWN 规则)
    BigDecimal bigDecimal3 = new BigDecimal("2.125456").setScale(2, BigDecimal.ROUND_CEILING);
    System.out.println("ROUND_CEILING:" + bigDecimal3);//2.13
    BigDecimal bigDecimal4 = new BigDecimal("-2.125456").setScale(2, BigDecimal.ROUND_CEILING);
    System.out.println("ROUND_CEILING:" + bigDecimal4);//-2.12
    
    // 4. ROUND_FLOOR(正数省略内容,负数向下进一位)
    BigDecimal bigDecimal5 = new BigDecimal("2.125456").setScale(2, BigDecimal.ROUND_FLOOR);
    System.out.println("ROUND_FLOOR:" + bigDecimal5);//2.12
    BigDecimal bigDecimal6 = new BigDecimal("-2.125456").setScale(2, BigDecimal.ROUND_FLOOR);
    System.out.println("ROUND_FLOOR:" + bigDecimal6);//-2.13
    
    // 5. ROUND_HALF_UP,ROUND_HALF_DOWN(四舍五入)
    BigDecimal bigDecimal7 = new BigDecimal("2.125456").setScale(2, BigDecimal.ROUND_HALF_UP);
    System.out.println("ROUND_HALF_UP:" + bigDecimal7);//2.13
    BigDecimal bigDecimal8 = new BigDecimal("-2.125456").setScale(2, BigDecimal.ROUND_HALF_DOWN);
    System.out.println("ROUND_HALF_DOWN:" + bigDecimal8);//-2.13
    
    // 6. ROUND_HALF_EVEN(指定小数位的前一位如果是奇数则四舍五入后进位,如果是偶数则舍弃指定小数位后面内容)
    BigDecimal bigDecimal9 = new BigDecimal("2.113").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    System.out.println("ROUND_HALF_EVEN:" + bigDecimal9);//2.11  虽然是奇数,但是3<5,不会进位
    BigDecimal bigDecimal10 = new BigDecimal("2.115").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    System.out.println("ROUND_HALF_EVEN:" + bigDecimal10);//2.12   因为是奇数且符合"五入",则进位
    // 此舍入模式也称为“银行家舍入法”。四舍六入,五分两种情况。
    // 如果前一位为奇数,则入位,否则舍去。
    
    // 8.ROUND_UNNECESSARY(断言请求的操作具有精确的结果,因此不需要舍入。)
    // 如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException
  • 相关阅读:
    Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
    XML学习笔记(2)--dom4j操作XML
    坦克大战(版本2.5-版本2.9)
    坦克大战(版本1.7-版本2.4)
    坦克大战(版本1.0-版本1.6)
    坦克大战(版本0.1-版本0.9)
    JavaSE聊天室
    HTML+CSS+JS学习总结
    JDBC学习笔记(10)——调用函数&存储过程
    VS工程的相对路径写法
  • 原文地址:https://www.cnblogs.com/ooo0/p/11803973.html
Copyright © 2011-2022 走看看