文档

Java™教程
隐藏目录
使用预定义的格式
路径:国际化
课程:格式化
部分:数字和货币

使用预定义格式

通过调用NumberFormat类提供的方法,您可以根据Locale来格式化数字、货币和百分比。下面的内容演示了使用一个名为NumberFormatDemo.java的示例程序进行格式化的技术。

数字

您可以使用NumberFormat方法来格式化原始类型数字,例如double,以及它们对应的包装对象,例如Double

以下代码示例根据Locale格式化一个Double。调用getNumberInstance方法返回一个特定于区域设置的NumberFormat实例。format方法接受Double作为参数,并以String形式返回格式化后的数字。

static public void displayNumber(Locale currentLocale) {

    Integer quantity = new Integer(123456);
    Double amount = new Double(345987.246);
    NumberFormat numberFormatter;
    String quantityOut;
    String amountOut;

    numberFormatter = NumberFormat.getNumberInstance(currentLocale);
    quantityOut = numberFormatter.format(quantity);
    amountOut = numberFormatter.format(amount);
    System.out.println(quantityOut + "   " + currentLocale.toString());
    System.out.println(amountOut + "   " + currentLocale.toString());
}

此示例输出如下内容;它展示了相同数字的格式如何随Locale的不同而变化:

123 456   fr_FR
345 987,246   fr_FR
123.456   de_DE
345.987,246   de_DE
123,456   en_US
345,987.246   en_US

使用非阿拉伯数字形式

默认情况下,当文本包含数字值时,这些值将使用阿拉伯数字显示。如果希望使用其他Unicode数字形式,则可以使用java.awt.font.NumericShaper类。 NumericShaper API使您能够以任何Unicode数字形式显示作为ASCII值在内部表示的数字值。有关更多信息,请参见将拉丁数字转换为其他Unicode数字

此外,一些语言环境具有指定使用Unicode数字形式代替阿拉伯数字的变体代码,例如泰语的语言环境。有关更多信息,请参见变体代码部分的创建语言环境

货币

如果您正在编写商业应用程序,可能需要格式化和显示货币。您可以以与数字相同的方式格式化货币,只是调用getCurrencyInstance创建格式化程序。当调用format方法时,它会返回一个包含格式化后的数字和适当货币符号的String

以下代码示例展示了如何以区域设置特定的方式格式化货币:

static public void displayCurrency( Locale currentLocale) {

    Double currencyAmount = new Double(9876543.21);
    Currency currentCurrency = Currency.getInstance(currentLocale);
    NumberFormat currencyFormatter = 
        NumberFormat.getCurrencyInstance(currentLocale);

    System.out.println(
        currentLocale.getDisplayName() + ", " +
        currentCurrency.getDisplayName() + ": " +
        currencyFormatter.format(currencyAmount));
}

上述代码生成的输出如下:

法国(法国),欧元:9 876 543,21 €
德国(德国),欧元:9.876.543,21 €
英语(美国),美元:$9,876,543.21

乍一看,这个输出可能看起来不对,因为数字值都是相同的。当然,9 876 543,21 €并不等于$9,876,543.21。然而,请记住,NumberFormat类不知道汇率。属于NumberFormat类的方法格式化货币,但不进行转换。

请注意,Currency类的设计是确保每个货币只有一个实例。因此,没有公共构造函数。如前面的代码示例所示,你可以使用getInstance方法获取一个Currency实例。

示例InternationalizedMortgageCalculator.java还演示了如何使用Currency类。(请注意,此示例不会转换货币值。)以下示例使用en-US区域设置:

按月还款计算器,en-US区域设置

以下示例使用en-UK区域设置:

按月还款计算器,en-UK区域设置

示例InternationalizedMortgageCalculator.java需要以下资源文件:

Currency类还包含其他用于获取与货币相关信息的方法:

ISO 4217货币代码的可扩展支持

ISO 4217是由国际标准化组织发布的标准。它指定了用于表示货币和资金的三字母代码(以及等效的三位数数字代码)。此标准由外部机构维护,并独立于Java SE平台发布。

假设一个国家采用了不同的货币,并且ISO 4217维护机构发布了一个货币更新。为了在运行时实现这个更新并取代默认货币,创建一个名为<JAVA_HOME>/lib/currency.properties的属性文件。该文件包含了ISO 3166国家代码和ISO 4217货币数据的键值对。值部分由三个逗号分隔的ISO 4217货币值组成:字母代码、数字代码和小数位。以井号(#)开头的任何行都被视为注释行。例如:

# 加拿大的示例货币属性
CA=CAD,124,2

CAD代表加拿大元;124是加拿大元的数字代码;2是小数位,表示该货币需要多少位小数来表示小数货币。例如,下面的属性文件将把默认的加拿大货币替换为没有比加拿大元更小单位的加拿大元:

CA=CAD,124,0

百分比

您还可以使用NumberFormat类的方法来格式化百分比。要获取特定于区域设置的格式化程序,调用getPercentInstance方法。使用这个格式化程序,如0.75这样的小数分数将显示为75%。

以下代码示例显示了如何格式化百分比。

static public void displayPercent(Locale currentLocale) {

    Double percent = new Double(0.75);
    NumberFormat percentFormatter;
    String percentOut;

    percentFormatter = NumberFormat.getPercentInstance(currentLocale);
    percentOut = percentFormatter.format(percent);
    System.out.println(percentOut + "   " + currentLocale.toString());
}

此示例打印如下内容:

75 %   fr_FR
75%   de_DE
75%   en_US

上一页: 数字和货币
下一页: 自定义格式