项目有一个需求,把34899米转化成带小数(保留两位)的千米数输出出来.目前我知道有三种方式: 1. Math.round()最后返回的是一个整形数(显然此种方法能够排除了),固然咱们能够用这个方法间接实现保留两位小数的方法好比Math.round(34899/10d)/100d 2. NumberFormat的setMaximumFractionDigits和format方法. ``` //setMaximumFractionDigits表示保留的数量,注意这个保留的最后一位小数是四舍五入后产生的,而format方法返回的是一个字符串. NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(1); String str = nf.format(count);
3. BigDecimal的divide方法.当咱们须要精确计算的时候,通常是选择BigDecimal这个对象的.
//BigDecimal具备多个构造方,记住绝对不能使用BigDecimal带Double类型的构造方法,会致使结果不许确. BigDecimal bd = new BigDecimal("123.236"); BigDecimal aaa = bd.setScale(2, BigDecimal.ROUND_UP); //结果123.24 //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则向下舍
PPPSSS: **当咱们在换算单位的时候为了保留精确度,须要在换算单位后加上d保证精度不会丢失,好比:1234米转换成km 直接"1234/1000"会获得1,而"1234/1000d"则获得1.234.**