今天群里有人在处理小数点方面出了点问题,趁机回顾下保留小数点的方式,这里介绍2种,利用BigDecimal类及DecimalFormat类。
package com.huayu.java91up;
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* Create by zxb on 2017/4/17
*/
public class Test {
public static void main(String[] args) {
System.out.println("use bigdecimal...");
BigDecimal num1 = new BigDecimal("11.015").setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal num2 = new BigDecimal("11.004").setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal num3 = new BigDecimal("11.006").setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal num4 = new BigDecimal("11.1").setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(num1); // 11.02
System.out.println(num2); // 11.00
System.out.println(num3); // 11.01
System.out.println(num4); // 11.10
System.out.println("use formatter...");
DecimalFormat df = new DecimalFormat("0.00");
System.out.println(df.format(new Double("11.015")));
System.out.println(df.format(new Double("11.004")));
System.out.println(df.format(new Double("11.006")));
System.out.println(df.format(new Double("11.1")));
}
}
执行结果:
同时,关于HALFDOWN和HALFUP的区别,看下API注释
从上面对比得知,两者的区别就是在处理小数点为5的情况不同。HALFUP会向上进位,HALFDOWN是向下保留。
补充一点:DecimalFormat中,#表示没有则为空,0表示如果没有则该位补0,比如0.07,用#.00,就会是".07",用0.00,会是"0.07"。
BigDecimal.ROUND_FLOOR 下层,总是往值小了取
BigDecimal.ROUND_CEILING 上浮,总是往值大了取
BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 不区分大小写的总往上或者总往下