Java NumberFormat

时间:2020-01-09 10:35:35  来源:igfitidea点击:

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,因为逗号将被解释为整数分隔符(例如,千位分隔符),而不是分数分隔符。