当我们开发任何针对不同国家的应用程序时,尽管数据存储总是相同的,但数据的表现形式应该是针对每个国家的。这对java程序员来说是一项繁琐的工作,因为他们需要处理相同的数据格式化到特定的国家。
java引入了Globalization 和localization 概念。作为其中的一部分,有许多格式化类,包括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。NumerFormat 是java.text 中的一个类,利用这些类我们可以格式化以下情况。
- 根据国家和语言格式化数字
- 按货币格式化数字
- 格式化数字的百分比,如千位数分隔符和精度
- 如何在两位数上显示个位数?
- 如何在输入的数字上显示带有小数的百分比
NumberFormat 是一个抽象的工厂类,我们可以使用静态 方法创建对象。getInstance()
NumberFormat examples:
这些例子是用来给出NumberFormat 类或使用自定义格式的子类的基本概念。
如何格式化或打印一个以千位数为单位的数字?
我们可以用很多方法将数字格式化为千位分隔符。
- 一种方法是使用
String.format()方法 - 第二种方法是使用
regular expression - 第三种方法是使用
NumberFormatjava类。
下面是一个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``NumberFormat 是DecimalFormat 的父类,用于将数字格式化为小数位。主要是十进制格式类用于格式化本地设置的数字。
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的例子,用于格式化货币和数字分离。