zoukankan      html  css  js  c++  java
  • BigDecimal除法问题

    BigDecimal类的主要功能是进行小数的大数计算,而且最重要的是可以精确到指定的四舍五入位数。

    如果要进行四舍五入的操作,则必须依靠以下的方法:
    public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
    scale:表示四舍五入的位数

    在上面的例子中,我们使用了BigDecimal类,并且采用setScale方法设置了精度,同时传递了一个RoundingMode.HALF_EVEN参数表示使用银行家舍入法则进行近似计算,BigDecimal和RoundingMode是一个绝配,想要采用什么舍入模式使用RoundingMode设置即可。目前Java支持以下七种舍入方式:

    ROUND_UP: 远离零方向舍入。

    向远离0的方向舍入,也就是说,向绝对值最大的方向舍入,只要舍弃位非0即进位。

    ROUND_DOWN:趋向零方向舍入。

    向0方向靠拢,也就是说,向绝对值最小的方向输入,注意:所有的位都舍弃,不存在进位情况。

    ROUND_CEILING:向正无穷方向舍入。

    向正最大方向靠拢,如果是正数,舍入行为类似于ROUND_UP;如果为负数,则舍入行为类似于ROUND_DOWN。注意:Math.round方法使用的即为此模式。

    ROUND_FLOOR:向负无穷方向舍入。

    向负无穷方向靠拢,如果是正数,则舍入行为类似于 ROUND_DOWN;如果是负数,则舍入行为类似于 ROUND_UP。

    HALF_UP: 最近数字舍入(5进)。

    这就是我们最最经典的四舍五入模式。

    HALF_DOWN:最近数字舍入(5舍)。

    在四舍五入中,5是进位的,而在HALF_DOWN中却是舍弃不进位。

    HALF_EVEN :银行家算法。

    在普通的项目中舍入模式不会有太多影响,可以直接使用Math.round方法,但在大量与货币数字交互的项目中,一定要选择好近似的计算模式,尽量减少因算法不同而造成的损失。(银行家算法就是,假如保留两位,第三位大于5,则进1;小于5,舍去;第三位为奇数,进1,偶数,舍去。)

    想要飞得更高,就该忘记地平线!
  • 相关阅读:
    MVC中权限管理
    ElasticSearch作为Windows服务启动
    linux下mysql常用的一些命令
    用Markdown写博客
    JAVA设计模式——简单工厂
    JAVA设计模式——单例模式
    JAVA设计模式——开篇
    Centos7.3安装和配置Mysql5.7
    java开发环境配置——IDEA SVN的使用
    java开发环境配置——IntelliJ IDEA
  • 原文地址:https://www.cnblogs.com/shenwen/p/9481856.html
Copyright © 2011-2022 走看看