Java 舍入法
传统的四舍五入法
传统的四舍五入法就是我们日常生活中所认识的四舍五入,看保留位的下一位数,大于或等于5就进位,否则舍去。
在 Java
中实现这种传统的四舍五入法很几种方法:
1. BigDecimal
与 RoundingMode
的配合
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
中,可以通过 BigDecimal
与 RoundingMode
来表达这种银行家舍入法:
BigDecimal d = new BigDecimal(100000);//存款
BigDecimal r = new BigDecimal(0.001875*3);//利息
BigDecimal i = d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);//使用银行家算法