Java NumberFormat 教程:Java中NumberFormat的3个例子

660 阅读4分钟

当我们开发任何针对不同国家的应用程序时,尽管数据存储总是相同的,但数据的表现形式应该是针对每个国家的。这对java程序员来说是一项繁琐的工作,因为他们需要处理相同的数据格式化到特定的国家。

java引入了Globalizationlocalization 概念。作为其中的一部分,有许多格式化类,包括java.text 包中的NumberFormat

什么是java中的内部化(i18n)和本地化?

internalization 是一种概念性的编程技术,其编码方式可以使任何软件应用程序适用于多种语言和国家。应用程序的数据应该按照特定的地区显示。

通常,考虑到金融应用程序,存储在后台数据库中的数据总是相同的,但每个国家的显示格式总是不同的。这意味着美国有dollar 符号作为货币,代表任何对象的价格,dollar 总是显示在价格数字(100美元)之前,而印度有不同的货币符号,这个符号应该显示在任何数字的价格(100 1)之后。因此,我们必须以这样的方式编写一个应用程序,使其支持多种语言和多个国家。

让我们再看一个场景。

如果我们开发一个针对不同国家的网络应用程序来显示这些数据,我们必须按以下方式处理不同的情况。

1000000.11这个数字存储在数据库中,应该根据具体国家的千位数来显示,也就是说,如果我从美国访问这个应用程序,应该显示美国的具体格式。

1,000,000.11应该显示给美国人
1 000 000,11应该显示给德国人
存储的数字是独立于任何地方的,但显示应该是按地方的。

NumberFormat 解决了上面提到的所有数字格式化功能的显示。

java中的NumberFormat类

NumberFormat 提供了自定义的格式,以根据应用程序的需要对数字进行格式化。

java提供了解决所有这些显示格式的API。NumerFormatjava.text 中的一个类,利用这些类我们可以格式化以下情况。

  • 根据国家和语言格式化数字
  • 按货币格式化数字
  • 格式化数字的百分比,如千位数分隔符和精度
  • 如何在两位数上显示个位数?
  • 如何在输入的数字上显示带有小数的百分比

NumberFormat 是一个抽象的工厂类,我们可以使用静态 方法创建对象。getInstance()

NumberFormat examples:

这些例子是用来给出NumberFormat 类或使用自定义格式的子类的基本概念。

如何格式化或打印一个以千位数为单位的数字?

我们可以用很多方法将数字格式化为千位分隔符。

  • 一种方法是使用String.format() 方法
  • 第二种方法是使用regular expression
  • 第三种方法是使用NumberFormat java类。

下面是一个NumberFormat的例子。

Locale usaLocale = new Locale("en", "US");  
Locale canadalocale = new Locale("fr", "CA");  
NumberFormat formatusa = DecimalFormat.getInstance(usaLocale);  
formatusa.setGroupingUsed(true);  
System.out.println("USA " + formatusa.format(123456789));  
NumberFormat formatCanada = DecimalFormat.getInstance(canadalocale);  
formatCanada.setGroupingUsed(true);  
System.out.println("Canada " + formatCanada.format(123456789));

输入值为123456789,输出值应以千位分隔符分隔,并返回123456789。

如何将数字格式化为小数位。

DecimalFormat``NumberFormatDecimalFormat 的父类,用于将数字格式化为小数位。主要是十进制格式类用于格式化本地设置的数字。

DecimalFormat df=new DecimalFormat("##.0000");  
System.out.println("Decimal value with 4 digits "+df.format(12345.893477));  

有两件事需要注意,因为我们正在为DecimalFormat 对象提供模式 "##.0000"。格式化对象将这些双数/浮点数格式化为小数点后的4位数字。
这个例子还对双数值进行了四舍五入,应用了特定模式的小数位。

如何以货币格式显示数字?

这是一个以特定国家货币格式显示数字的例子。

这需要设置Locale 类来传递给NumberFormat实例

Locale englishLocale = Locale.US;  
String numberDisplay = NumberFormat.getCurrencyInstance(englishLocale).format(89756.862);  
Locale germanyLocale = Locale.GERMANY;  
String numberDisplayInGermany = NumberFormat.getCurrencyInstance(germanyLocale).format(89756.862);  
System.out.print(" "+numberDisplay+" "+numberDisplayInGermany);  

希望你能理解java中NumberFormat 类的基本用法。请分享您的评论

如何显示带小数的输入数字的百分比

有时,如果输入的数字是123.25,输出应该显示百分比的数字,如12,325.00%。

这里有一系列的步骤可以做到

  • 首先使用getPercentInstance() 静态方法NumberFormat 实例
  • 如果你想限制输出数字的分数,使用setMinimumFractionDigits
  • 用输入值调用format 方法
import java.text.NumberFormat;

public class Test {
    public static void main(String[] args) {
        NumberFormat nfInstance = NumberFormat.getPercentInstance();
        nfInstance.setMinimumFractionDigits(2);
        System.out.println( nfInstance.format(123.25));

    }
}

如何在双位数中始终显示个位数

例如,如果输入的数字是1到90的任何数字

如果输入是1 - 输出01 如果输入是90 - 输出90

  • 首先创建NumberFormat实例getNumberInstance 方法
  • 将一个值的整数部分限制为2,使用setMinimumIntegerDigits
  • 最后格式化输入数字

import java.text.NumberFormat;

public class Test {
    public static void main(String[] args) {
        NumberFormat nfInstance = NumberFormat.getNumberInstance();
        nfInstance.setMinimumIntegerDigits(2);
        System.out.println( nfInstance.format(1));

    }
}

结语

总而言之,你学到了NumberFormat的例子,用于格式化货币和数字分离。