对java数字⼩数点后位数进⾏处理
⼀、返回 String 类型数据
对数据进⾏处理后,返回 String 类型数据,可以通过如下⽅式进⾏处理:
DecimalFormat 对数据格式化
String.format 对数据格式化
两者达到的效果是⼀样的。
- ⼩数点后位数不⾜的,补0
- 四舍五⼊,对数据截断
Double d = 123.451789D;
DecimalFormat decimalFormat = new DecimalFormat("#.0000000");
DecimalFormat decimalFormat2 = new DecimalFormat("#.000");
DecimalFormat decimalFormat3 = new DecimalFormat("#.00");
bigdecimal除法保留小数//补齐位数
System.out.println(decimalFormat.format(d));
//四舍五⼊
System.out.println(decimalFormat2.format(d));
System.out.println(decimalFormat3.format(d));
//四舍五⼊
System.out.println(String.format("%.2f",d));
System.out.println(String.format("%.3f",d));
//补齐位数
System.out.println(String.format("%.10f",d));
补充:
String.format 中对数字处理有如下限制: %[argument_index$][flags][width][.precision][t]conversion ⼆、返回 Double 类型数据
可通过 BigDecimal 对数据进⾏处理,在精度的处理上能满⾜多种需求:
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) 四舍五⼊,>=0.5时向上取,反之则向下
setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五⼊,>0.5时向上取,反之则向下
System.out.println(BigDecimal.valueOf(d).setScale(2, BigDecimal.ROUND_UP).doubleValue());
System.out.println(BigDecimal.valueOf(d).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue());
System.out.println(BigDecimal.valueOf(d).setScale(1, BigDecimal.ROUND_HALF_DOWN).doubleValue());