• 【Bigdecimal】


    ---恢复内容开始---

    大位数除法的时候注意1/3问题:异常:【Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.】

    会抛出异常:

    BigDecimal setScale = new BigDecimal(a).divide(new BigDecimal(b)).setScale(2, RoundingMode.UP );// 会抛出异常
    BigDecimal setScale = new BigDecimal(a).divide(new BigDecimal(b),2,RoundingMode.UP);//不会

     其实devide的函数定义如下

    BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ;

    scale为小数位数;

    roundingMode为小数模式,模式如下:

    ROUND_CEILING
    如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。
    ROUND_DOWN
    从不在舍弃(即截断)的小数之前增加数字。
    ROUND_FLOOR
    如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。
    ROUND_HALF_DOWN
    若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN 。
    ROUND_HALF_EVEN
    如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作 ROUND_HALF_DOWN 。
    ROUND_HALF_UP
    若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN 。
    ROUND_UNNECESSARY
    该“伪舍入模式”实际是指明所要求的操作必须是精确的,,因此不需要舍入操作。
    ROUND_UP
    总是在非 0 舍弃小数(即截断)之前增加数字。

    写成如下便可通过

    BigDecimal num3 = num1.divide(num2,10,RoundingMode.ROUND_CEILING);

    ---恢复内容结束---

  • 相关阅读:
    远程调用之RMI、Hessian、Burlap、Httpinvoker、WebService的比较
    遍历List/Map的时候删除成员遇到的奇怪问题
    Java事务处理
    ThreadLocal学习记录
    IntelliJ IDEA+Tomcat+Nginx运行git项目
    JavaIO和JavaNIO
    Spring MVC的启动过程
    Java中的集合类
    Java中的泛型
    Java 多线程的基本概念
  • 原文地址:https://www.cnblogs.com/yangjian-java/p/6542958.html
Copyright © 2020-2023  润新知