zoukankan      html  css  js  c++  java
  • 【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);

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

  • 相关阅读:
    [翻译] 为什么Uber的数据库从Postgres 切换到 MySql
    Salesforce.com Object Query Language (SOQL) 示例
    SalesForce 入门
    jeasyui datagrid 使用记
    2- 计算机的组成以及VMware使用
    1.计算机三大操作系统介绍
    01- Java概述
    01- Sublime的工具安装以及使用
    01- web测试快速入门
    02- Java搭建环境搭建
  • 原文地址:https://www.cnblogs.com/yangjian-java/p/6542958.html
Copyright © 2011-2022 走看看