Java舍入法

Java 舍入法

传统的四舍五入法

传统的四舍五入法就是我们日常生活中所认识的四舍五入,看保留位的下一位数,大于或等于5就进位,否则舍去。

Java 中实现这种传统的四舍五入法很几种方法:

1. BigDecimalRoundingMode 的配合

double f = 11123.5455;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, RoundingMode.HALF_UP).doubleValue();

setScale 方法用于设置精度,第一个参数表示保留的位数,第二个参数表示取舍方式,RoundingMode.HALF_UP 就是传统的四舍五入。

2. DecimalFormat

DecimalFormat df = new DecimalFormat("#.00");
Double d = new Double(df.format(11123.5455));

.00 表示保留两位小数

3. String.format()

double d = 11123.5455;
String result = String.format("%.2f",d);
d = new Double(result);

%.2f 表示保留两位小数

银行家舍入法

由美国的一位银行家提出的舍入法,规则如下:

  • 舍去位数值小于5时,直接舍去。
  • 舍去位数值大于5时,进位后舍去。
  • 当舍去位的数值等于5时,若5后面还有其他非0数值,则进位后舍去,若5后面是0时,则根据5前一位数的奇偶性来判断,奇数进位,偶数舍去。

例如:

11.556 = 11.56 —— 舍去位大于5,进位
11.554 = 11.55 —— 舍去位小于5,舍去
11.5551 = 11.56 —— 舍去位等于5,后面还有非0数值,则进位后舍去
11.545 = 11.54 —— 舍去位等于5,后面无数值,前位为偶数应舍去
11.555 = 11.56 —— 舍去位等于5,后面无数值,前位为奇数应进位

Java 中,可以通过 BigDecimalRoundingMode 来表达这种银行家舍入法:

BigDecimal d = new BigDecimal(100000);//存款
BigDecimal r = new BigDecimal(0.001875*3);//利息
BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);//使用银行家算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章