zoukankan      html  css  js  c++  java
  • 【Java】BigDecimal.setScale用法总结

    BigDecimal.setScale主要用于对BigDecimal数据小数点后的位数进行 进位、舍位、截断等操作

    BigDecimal使用说明

      1. 不建议,会造成精度损失

    BigDecimal num1 = new BigDecimal(2.222222);

       2. 不建议,虽然不会损失精度

    BigDecimal num2 = new BigDecimal(2);

       3. 建议,使用字符串格式构造,不会损失精度

     BigDecimal num = new BigDecimal("2.222222");

    BigDecimal Rounding Modes

       1. ROUND_UP = 0

    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_UP); 
    System.out.println(b); //2.23 进位处理,不管后面数字的大小
      2. ROUND_DOWN = 1
    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_DOWN); 
    System.out.println(b); //2.22 去掉多余的位数,不管后面数字的大小

      3. ROUND_CEILING = 2

    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_CEILING); 
    System.out.println(b);//2.23 如果是正数,相当于BigDecimal.ROUND_UP BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_CEILING);
    System.out.println(b);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN

      4. ROUND_FLOOR = 3

    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_FLOOR); 
    System.out.println(b);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_FLOOR);
    System.out.println(b);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP

      5. ROUND_HALF_UP = 4

    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_UP); 
    System.out.println("ROUND_HALF_UP" + b); //2.22 根据后面的数字四舍五入(大于等于 5进位)

      6. ROUND_HALF_DOWN = 5

    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_DOWN); 
    System.out.println("ROUND_HALF_DOWN" + b);//2.22 根据后面的数字四舍五入(大于 5进位)

      7. ROUND_HALF_EVEN = 6

     
    BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN); 
    System.out.println(b);//2.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN);
    System.out.println(b);//2.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP

      8. ROUND_UNNECESSARY = 7

     
    BigDecimal b = new BigDecimal("2.22").setScale(3, BigDecimal.ROUND_UNNECESSARY); 
    System.out.println(b); // Scale位数 必须小于等于 小数位数,否则会抛异常: java.lang.ArithmeticException: Rounding necessary
  • 相关阅读:
    2020Python作业——类与对象
    图文存储常识:单机、集中、分布式、云、云原生存储
    宜泊科技加入阿里云原生合作伙伴计划,共建智慧停车新生态
    dubbogo 3.0:牵手 gRPC 走向云原生时代
    千万商家的智能决策引擎AnalyticDB如何助力生意参谋双十一
    我在阿里云做前端代码智能化
    网络病毒源的排查(2005年3月22日维护记录)
    在页面中控制媒体流的起播点和播放长度
    注意服务器系统日期对防病毒软件的影响
    修改SQL SERVER虚拟服务器IP的问题
  • 原文地址:https://www.cnblogs.com/gossip/p/14213329.html
Copyright © 2011-2022 走看看