Java 保留2位小数点(2种方式)

今天群里有人在处理小数点方面出了点问题,趁机回顾下保留小数点的方式,这里介绍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")));
    }
}
执行结果:

Java 保留2位小数点(2种方式)_第1张图片


同时,关于HALFDOWNHALFUP的区别,看下API注释

Java 保留2位小数点(2种方式)_第2张图片


Java 保留2位小数点(2种方式)_第3张图片


从上面对比得知,两者的区别就是在处理小数点为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 不区分大小写的总往上或者总往下

你可能感兴趣的:(Java语言特性)