目前 Java 支持7中舍入法:
1、 ROUND_UP:远离零方向舍入。向绝对值最大的方向舍入,只要舍弃位非0即进位。
2、 ROUND_DOWN:趋向零方向舍入。向绝对值最小的方向输入,所有的位都要舍弃,不存在进位情况。
3、 ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢。若是正数,舍入行为类似于 ROUND_UP,若为负数,舍入行为类似于 ROUND_DOWN。 Math.round() 方法就是使用的此模式。
4、 ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢。若是正数,舍入行为类似于 ROUND_DOWN;若为负数,舍入行为类似于 ROUND_UP。
5、 HALF_UP:最近数字舍入(5进)。这是我们最经典的四舍五入。
6、 HALF_DOWN:最近数字舍入(5舍)。在这里5是要舍弃的。
7、 HAIL_EVEN:银行家舍入法。
银行计算法:
丢失精度的问题:
package com.levng;
import java.math.BigDecimal;
import java.math.RoundingMode;
import org.junit.Test;
public class Xie {
public void test2(){
BigDecimal b = new BigDecimal(11.555);
BigDecimal f1 = b.setScale(2,RoundingMode.HALF_EVEN);
System.out.println("季利息是:"+f1);
}
public void testHalfEven(){
BigDecimal b = new BigDecimal(Double.toString(11.555));
BigDecimal f1 = b.setScale(2,RoundingMode.HALF_EVEN);
double f2 = f1.doubleValue();
System.out.println("季利息是:"+f1);
System.out.println("季利息是:"+f2);
}
public void testBig(){
BigDecimal b = new BigDecimal(11.555);
System.out.println(b);
}
}