BigDecimal做除法的时候精度问题

业务是要从分转化到元,因为这个除100的时候,没有写ROUND_UNNECESSARY,导致最终金额都四舍五入到元   o(╥﹏╥)o

new BigDecimal().divide(BigDecimal,保留小数点后几位小数,舍入模式)

舍入模式 必须要写,如果是精确计算的结果就写 BigDecimal.ROUND_UNNECESSARY,不然会四舍五入到整数

 

BigDecimal q1 = new BigDecimal("100.00");
new BigDecimal(金额分).divide(q1, 2,BigDecimal.ROUND_UNNECESSARY)

舍入模式:

ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入

标签

发表评论