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
  • 相关阅读:
    物料清单概述
    java开发webservice的1种方式
    java web service简单示例
    IOS证书过期
    Windows 2012 R2 安装net4.6.1
    sqlserver 性能调优脚本
    solidty--owner.sol
    ERC20-USDT
    EOS 公开节点及自有节点部署
    微信第三方平台授权流程
  • 原文地址:https://www.cnblogs.com/ooo0/p/11803973.html
Copyright © 2011-2022 走看看