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。注意:und⽅法使⽤的即为此模式。
ROUND_FLOOR:向负⽆穷⽅向舍⼊。
向负⽆穷⽅向靠拢,如果是正数,则舍⼊⾏为类似于 ROUND_DOWN;如果是负数,则舍⼊⾏为类似于 ROUND_UP。
HALF_UP:最近数字舍⼊(5进)。
这就是我们最最经典的四舍五⼊模式。
bigdecimal除法保留小数
HALF_DOWN:最近数字舍⼊(5舍)。
在四舍五⼊中,5是进位的,⽽在HALF_DOWN中却是舍弃不进位。
HALF_EVEN :银⾏家算法。
在普通的项⽬中舍⼊模式不会有太多影响,可以直接使⽤und⽅法,但在⼤量与货币数字交互
的项⽬中,⼀定要选择好近似的计算模式,尽量减少因算法不同⽽造成的损失。(银⾏家算法就是,假如保留两位,第三位⼤于5,则进1;⼩于5,舍去;第三位为奇数,进1,偶数,舍去。)