一篇文章搞懂DecimalFormat对数字进行格式化的处理


数字格式化在生活中会经常遇到,我们经常选择DecimalFormat类来进行数字格式化操作。

DecimalFormat支持的特殊符号

符号 位置。含义
0 数字。如果该位不存在数字,则用0补充
# 数字。在不影响数值的情况下,该位为0或不存在时,不予补充
. 数字。小数点
- 数字。减号
, 数字。数字分组符号
E 用于表示科学计数法
% 前缀或后缀。乘以 100 并显示为百分数
\u2030 前缀或后缀。乘以 1000 并显示为千分数
¤ (\u00A4) 前缀或后缀。货币记号,由货币符号替换。如果两个同时出现,则用国际货币符号替换。如果出现在某个模式中,则使用货币小数分隔符,而不使用小数分隔符。
前缀或后缀。用于在前缀或或后缀中为特殊字符加引号。
; 子模式边界。分隔正数和负数子模式

DecimalFormat的构造器

1、 public DecimalFormat()

使用默认模式和默认语言环境的符号创建一个 DecimalFormat。
使用该构造器的对象之前必须使用applyPattern()方法设置格式化的格式。

2、 public DecimalFormat(String pattern)

使用给定的模式和默认语言环境的符号创建一个 DecimalFormat。

3、 public DecimalFormat(String pattern,DecimalFormatSymbols symbols)

使用给定的模式和符号创建一个 DecimalFormat。需要完全自定义格式化的行为时使用此构造方法。

具体操作

小数点前后的保留

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 3.14159265358979323846;
    public DecimalFormat df = new DecimalFormat();

    //使用0和.进行数字格式化
    @Test
    public void test1 () {
        df.applyPattern("0.0");
        System.out.println(df.format(pi));
        //输出结果:3.1
        df.applyPattern("00.0");
        System.out.println(df.format(pi));
        //输出结果:03.1
        df.applyPattern("0.00");
        System.out.println(df.format(pi));
        //输出结果:3.14
    }

    //使用#和.进行数字格式化
    @Test
    public void test2 () {
        df.applyPattern("#.#");
        System.out.println(df.format(pi));
        //输出结果:3.1
        df.applyPattern("##.#");
        System.out.println(df.format(pi));
        //输出结果:3.1
        df.applyPattern("#.##");
        System.out.println(df.format(pi));
        //输出结果:3.14
    }

}

值得注意的是:一段pattern里只允许出现一次小数点

嵌入文本

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 3.14159265358979323846;
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test3 () {
        df.applyPattern("圆周率:00.00");
        System.out.println(df.format(pi));
        //输出结果:圆周率:03.14
    }

    @Test
    public void test4 () {
        df.applyPattern("圆周率:##.##");
        System.out.println(df.format(pi));
        //输出结果:圆周率:3.14
    }

    @Test
    public void test5 () {
        df.applyPattern("##圆周率.##");
        System.out.println(df.format(pi));
        //输出结果:3.14圆周率
    }

}

取负数

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 3.14159265358979323846;
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test6 () {
        df.applyPattern("-##.###");
        System.out.println(df.format(pi));
        //输出结果:-3.142
        df.applyPattern("##.-###");
        System.out.println(df.format(pi));
        //输出结果:3.142-【和添加字符的效果相同】
    }
}

使用【,】分隔

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 3.14159265358979323846;
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test7 () {
        pi = pi * 1000000;
        df.applyPattern("#,###.##");
        System.out.println(df.format(pi));
        //输出结果:3,141,592.65
        df.applyPattern("#,##.##");
        System.out.println(df.format(pi));
        //输出结果:3,14,15,92.65
    }
}

科学计数法

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 31415926535.8979323846;
    public DecimalFormat df = new DecimalFormat();

    //test8全是错例
    @Test
    public void test8 () {
        df.applyPattern("##.##E##");
        System.out.println(df.format(pi));
        //运行结果:java.lang.IllegalArgumentException
        df.applyPattern("00.00E");
        System.out.println(df.format(pi));
        //运行结果:java.lang.IllegalArgumentException
        df.applyPattern("00.00E##");
        System.out.println(df.format(pi));
        //运行结果:java.lang.IllegalArgumentException

    }

    @Test
    public void test9 () {
        df.applyPattern("##.##E00");
        System.out.println(df.format(pi));
        //输出结果:3.142E10
        df.applyPattern("00.00E00");
        System.out.println(df.format(pi));
        //输出结果:31.42E09
    }

}

值得注意的是:E后面必须是0,不能是#

百分数和千分数

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public double pi = 0.1466;
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test10 () {
        df.applyPattern("#.#%");
        System.out.println(df.format(pi));
        //输出结果:14.7%
        df.applyPattern("0.0%");
        System.out.println(df.format(pi));
        //输出结果:14.7%
        df.applyPattern("#.#\u2030");
        System.out.println(df.format(pi));
        //输出结果:146.6‰
    }
}

货币

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test11 () {
        double money = 100.00;
        df.applyPattern("\u00A4##.##");
        System.out.println(df.format(money));
        //输出结果:¥100
        df.applyPattern("\u00A400.00");
        System.out.println(df.format(money));
        //输出结果:¥100.00
        df.applyPattern("'$'00.00");
        System.out.println(df.format(money));
        //输出结果:$100.00
    }

}

特殊符号

import org.junit.Test;

import java.text.DecimalFormat;

public class TestDF {
    public DecimalFormat df = new DecimalFormat();

    @Test
    public void test12 () {
        double money = 100.00;
        df.applyPattern("'#'##.##");
        System.out.println(df.format(money));
        //输出结果:#100
        df.applyPattern("''00.00");
        System.out.println(df.format(money));
        //输出结果:'100.00
        df.applyPattern("00.'money'00");
        System.out.println(df.format(money));
        //运行结果:java.lang.IllegalArgumentException
    }
}

值得注意的是:嵌入【’】(英文单引号)特殊符号时,只需要在前面加一个单引号即可
特殊符号只能添加在开头或者末尾

发布了29 篇原创文章 · 获赞 13 · 访问量 4097

猜你喜欢

转载自blog.csdn.net/weixin_46192593/article/details/105150217
今日推荐