1、使用原生BigDecimal的setScale
publicstaticvoidmain(String[] args) { longaa=System.currentTimeMillis(); // System.out.println(aa);BigDecimala=newBigDecimal(5); BigDecimalb=newBigDecimal(8); BigDecimalbigDecimal=a.divide(b).setScale(2, RoundingMode.HALF_UP); System.out.println(bigDecimal); longbb=System.currentTimeMillis(); System.out.println(bb-aa); }
效果性能:(执行效率平均)
2、BigDecimal相除后转为double输出
publicstaticvoidmain(String[] args) { longaa=System.currentTimeMillis(); // System.out.println(aa);BigDecimala=newBigDecimal(5); BigDecimalb=newBigDecimal(8); // 转doubledoublev=a.divide(b, 2, RoundingMode.HALF_UP).doubleValue(); System.out.println(v); longbb=System.currentTimeMillis(); System.out.println(bb-aa); }
效果性能:(多次测试,大概率执行时间比没有转double输出长)可自测
3、BigDecimal.setScale()方法
BigDecimal.setScale()方法用于格式化小数点
- setScale(1)表示保留一位小数,默认用四舍五入方式
- setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3
- setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4
- setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4
- setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍
- setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入
- setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样
- setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。