method 1
/**
* method 1 值舍入时推荐
*/
String srcBlance = "82.54466";
double rate = 0.01;
double f = Double.parseDouble(srcBlance);
//BigDecimal b = new BigDecimal(f * rate); /** 会有精确性问题*/
BigDecimal b = new BigDecimal(new Double(f * rate).toString()); /** 不会有精确性问题*/
double f1 = b.setScale(0, RoundingMode.HALF_UP).doubleValue();
long extBalance = NumUtils.roundToLong(String.valueOf(f1)); /** roundToLong具备自动将浮点数进行整数化功能*/
System.out.println(extBalance);
method 2
/**
* method 2 值舍入时推荐
*/
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
nf.setRoundingMode(RoundingMode.UP);
System.out.println("method2: "+ nf.format(f));
method 3
/**
* method 3 仅仅格式化 保证精确
*/
DecimalFormat df = new DecimalFormat("#.000");
System.out.println("method3:" + df.format(f));
method 4
/**
* method 4 仅仅格式化 保证精确
*/
System.out.println(String.format("%.2f", f));
RoundingMode
目前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:银行家舍入法。