Java NumberFormat
java.text.NumberFormat类用于根据特定的Locale格式化数字。不同的国家/地区对数字格式使用不同的标准。在丹麦,使用逗号将整数的小数部分与整数部分分开。在英格兰,它们使用点。
创建一个NumberFormat
为特定的"语言环境"创建" NumberFormat"是这样完成的:
Locale locale = new Locale("da", "DK"); NumberFormat numberFormat = NumberFormat.getInstance(locale);
格式化数字
使用NumberFormatter格式化数字是通过format()方法完成的。这是一个例子:
String number = numberFormat.format(100.99); System.out.println(number);
使用丹麦语" Locale",此代码输出的输出为:
100,99
注意,像" 100.00"这样的数字可能不带小数点格式,如" 100"。
格式化货币
要将数字格式化为货币,我们需要一个货币NumberFormat
实例。我们可以使用getCurrencyInstanceInstance()来创建货币NumberFormat,如下所示:
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
仍然可以使用format()
方法将数字格式化为货币。这是一个例子:
String currency = currencyFormat.format(100.999); System.out.println(currency);
此代码输出的输出为:
kr 101,00
请注意,本地化的丹麦货币代码是如何写在数字前面的。其他国家/地区可能会在数字后面加上货币代码。还请注意,金额已四舍五入。
还可以获取" Currency"对象,该对象表示用于设置数字格式的货币。我们可以使用getCurrency()
方法进行操作。这是一个例子:
Currency currency = currencyFormat.getCurrency();
从"货币"实例中,我们可以使用其" getDisplayName()"和" getCurrencyCode()"等方法来获取货币的名称,符号等。
我们还可以使用NumberFormat类上的setCurrency()方法来设置"货币"对象,以将数字格式化为货币格式。这是一个例子:
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(new Locale("da", "DK")); numberFormat.setCurrency(Currency.getInstance("EUR")); String currencyString = numberFormat.format(120.99); System.out.println(currencyString);
此代码使用丹麦语区域设置创建货币格式化程序,然后与EURO交换用于格式化的货币。此代码输出的输出为:
€ 120,99
格式化百分比
要将数字格式化为百分比,我们需要一个百分比" NumberFormat"实例。我们可以使用getPercentageInstance()
来创建它,如下所示:
NumberFormat percentageFormat = NumberFormat.getPercentInstance(locale);
也可以使用format()
方法将数字格式化为百分比。这是一个例子:
String percentage = percentageFormat.format(99.999); System.out.println(percentage);
此代码输出的输出为:
10.000%
注意数字后的"%"字符。还要注意,数字是四舍五入的。
最小位数和最大位数
我们可以设置数字的最小和最大位数,以同时使用数字的整数部分和小数部分。我们可以使用以下方法进行操作:
numberFormat.setMinimumIntegerDigits(int digits) numberFormat.setMaximumIntegerDigits(int digits) numberFormat.setMinimumFractionDigits(int digits) numberFormat.setMaximumFractionDigits(int digits)
我们还可以使用以下方法再次获得这些值:
int digits = numberFormat.getMinimumIntegerDigits(); int digits = numberFormat.getMaximumIntegerDigits(); int digits = numberFormat.getMinimumFractionDigits(); int digits = numberFormat.getMaximumFractionDigits();
舍入模式
我们可能已经注意到,格式化后的数字是四舍五入的。我们可以使用NumberFormat类的setRoundingMode()方法设置舍入模式。这是一个例子:
NumberFormat numberFormat = NumberFormat.getInstance(new Locale("da", "DK")); numberFormat.setRoundingMode(RoundingMode.HALF_DOWN); numberFormat.setMinimumFractionDigits(0); numberFormat.setMaximumFractionDigits(0); String number = numberFormat.format(99.50); System.out.println(number);
该代码的输出为" 99"。由于四舍五入的方式,小数部分将被四舍五入,并减少到0个小数位。
解析数字
我们也可以使用NumberFormat类来解析数字。这是一个例子:
NumberFormat numberFormat = NumberFormat.getInstance(new Locale("da", "DK")); Number parse = numberFormat.parse("100,00"); System.out.println(parse.intValue());
运行此代码输出的输出为:
100
如我们所见,解析的字符串中的数字使用逗号(,)作为数字的整数部分和小数部分之间的分隔符。由于NumberFormat是使用丹麦语Locale实例创建的,因此此字符串将正确解析为值100。
如果使用UK区域设置实例创建了NumberFormat实例,则该数字已解析为10000,因为逗号将被解释为整数分隔符(例如,千位分隔符),而不是分数分隔符。