当我们面对需要对数字进行精细的格式化输出时,DecimalFormat 是一个非常重要的工具类。在本文中,我们将对 DecimalFormat 进行全方位的探讨,从各个方面阐述它的用法。
一、模式
在使用 DecimalFormat 进行数字格式化时,我们需要用到“模式”,模式是一个字符串,它定义了输出数字时的各种规则和格式,这些规则和格式可以包括数字位数、小数位数、分组分隔符、货币符号等等。一般来说,模式由一个或多个“数字格式字符”和特殊字符组成,其中数字格式字符指定输出数字的规则。
数字格式字符包括:
- 0:表示必须输出的数字
- #:表示可选的数字,如果不存在则不输出
- .:小数点
- ,:分组分隔符
- E:科学计数法
下面是一些模式的示例:
模式 输入值 输出值 0.00 12.3456 12.35 #,###.00 123456.789 123,456.79 $#,###.00 123456.789 $123,456.79 0.#####E0 123456789 1.23457E8
可以看到,我们可以根据需要自由选择使用哪些数字格式字符和特殊字符来构建模式,从而达到所需的格式输出。
二、基本用法
下面我们来看一下基本的使用方式。首先,我们需要创建一个 DecimalFormat 对象:
DecimalFormat df = new DecimalFormat();
如果需要使用自定义的模式,我们可以在创建对象时传入模式字符串:
DecimalFormat df = new DecimalFormat("0.00");
然后,我们使用 format 方法对数字进行格式化:
double num = 1234.56; String result = df.format(num); System.out.println(result); // 输出:"1234.56"(如果使用了自定义模式则输出符合模式的字符串)
在使用 format 方法输出结果时,DecimalFormat 会根据模式进行处理,生成符合规则的字符串。需要注意的是,输出结果是一个字符串,例如在控制台输出时,需要使用 println 或 print 方法进行输出。
三、数字格式化
数字格式化是 DecimalFormat 最主要的用途之一。格式化数字的方式有很多种,下面我们来逐一介绍。
1. 固定数字位数
使用“0”字符可以指定一个数字位必须输出,如果不存在则输出“0”,例如:
DecimalFormat df = new DecimalFormat("00000.000"); double num1 = 12.3456; double num2 = 123456.789; String result1 = df.format(num1); String result2 = df.format(num2); System.out.println(result1); // 输出:"00012.346" System.out.println(result2); // 输出:"123456.789"
可以看到,使用了“0”字符后,位数不足时会在前面补上“0”,但是位数超出时并不会进行舍入。
2. 计算数字位数
使用“#”字符可以指定一个数字位可以存在,也可以不存在,例如:
DecimalFormat df = new DecimalFormat("#.##"); double num1 = 1.0; double num2 = 1.23; double num3 = 1.234; String result1 = df.format(num1); String result2 = df.format(num2); String result3 = df.format(num3); System.out.println(result1); // 输出:"1" System.out.println(result2); // 输出:"1.23" System.out.println(result3); // 输出:"1.23"
可以看到,使用了“#”字符后,如果数字位不存在,不会进行输出。而且在四舍五入时,也会按照“#”字符所在位置来决定舍入位置。例如上面的示例中,在模式中只有两位小数,因此 num3 中的“4”被舍去了。
3. 指定小数位数
使用“.”字符可以指定小数位数,例如:
DecimalFormat df = new DecimalFormat("0.00"); double num1 = 1.2; double num2 = 2; String result1 = df.format(num1); String result2 = df.format(num2); System.out.println(result1); // 输出:"1.20" System.out.println(result2); // 输出:"2.00"
4. 分组分隔符
分组分隔符可以让输出结果更容易读懂。默认的分组分隔符是逗号(“,”),但是可以使用 setGroupingSeparator 方法来指定分隔符:
DecimalFormat df = new DecimalFormat("#,###.00"); double num = 123456.789; df.setGroupingSize(3); df.setGroupingUsed(true); String result = df.format(num); System.out.println(result); // 输出:"123,456.79"
在上面的示例中,我们使用 setGroupingSize 方法来指定每三个数字为一组,使用 setGroupingUsed 方法来开启分组分隔符。同时在模式中使用“#,###.00”指定了输出结果的格式。
四、货币格式化
DecimalFormat 也可以用来对货币进行格式化,以便输出符合规范的货币字符串。
DecimalFormat df = new DecimalFormat("¤#,###.00"); double num = 123456.789; df.setCurrency(Currency.getInstance(Locale.US)); String result = df.format(num); System.out.println(result); // 输出:"$123,456.79"
在上面的示例中,我们使用“¤”字符来指定货币符号,并使用 setCurrency 方法来指定使用的货币类型。需要注意的是,某些国家或地区的货币符号不是单个字符,而是多个字符或标志,此时可以在模式字符串中直接包含该符号,也可以使用 setPositivePrefix、setPositiveSuffix 等方法来对符号进行指定。
五、指数格式化
DecimalFormat 也可以用来进行指数格式化,例如:
DecimalFormat df = new DecimalFormat("0.###E0"); double num = 123456789; String result = df.format(num); System.out.println(result); // 输出:"1.235E8"
在上面的示例中,我们使用“E”字符来指定使用科学计数法,并使用“0.###”来指定保留小数点后三位。
六、总结
本文详细介绍了 DecimalFormat 的用法。首先我们介绍了模式,然后介绍了基本的使用方法。其次我们还介绍了数字格式化、货币格式化、指数格式化等方面的用法。在使用 DecimalFormat 进行数字格式化时,我们需要注意模式的设置,合理使用数字格式字符和特殊字符,从而达到预期的效果。
原创文章,作者:VAIB,如若转载,请注明出处:https://www.506064.com/n/138463.html