本文主要详细介绍了DecimalFormat的多种用法,有一定的参考价值,感兴趣的朋友可以参考一下。
NumberFormat.getInstance()方法返回NumberFormat的一个实例(实际上是NumberFormat的一个特定子类,比如DecimalFormat),适合根据本地设置格式化一个数字。您也可以使用非默认的区域设置,例如德国。然后格式化方法根据特定的区域规则格式化数字。这个程序也可以使用一个简单的形式:
NumberFormat.getInstance()。格式(1234.56)
但是保存一种格式并重用它更有效。当在国际上格式化数字时,这是一个大问题。
另一个是对格式的有效控制,比如指定小数位数。这里有一个简单的例子来解决这个问题:
导入Java . text . decimal format;
导入Java . util . locale;
公共类DecimalFormat2 {
公共静态void main(String args[]) {
//获取本地默认格式
DecimalFormat df1=新的decimal format( # # # # . 000 );
system . out . println(df1 . format(1234.56));
//获取德语格式
Locale.setDefault(区域设置。德语);
decimal format df2=new decimal format( # # # # . 000 );
system . out . println(df2 . format(1234.56));
}
}
在本例中,设置了数字格式,并使用了类似“####.000”的符号。这种模式意味着小数点前有四位,不够就空,小数点后有三位,不够就填0。程序的输出:
1234.560
1234,560
同样,你也可以控制指数形式的格式,例如:
导入Java . text . decimal format;
公共类DecimalFormat3 {
公共静态void main(String args[]) {
DecimalFormat df=新的decimal format( 0.000 e 0000 );
system . out . println(df . format(1234.56));
}
}
输出:
1.235E0003
对于百分比:
导入Java . text . number format;
公共类DecimalFormat4 {
公共静态void main(String args[]) {
number format nf=number format . getpercentinstance();
system . out . println(nf . format(0.47));
}
}
输出:
47%
到目前为止,您已经看到了几种不同的数字格式化技术。另一方面,如何读取和解析包含格式化数字的字符串?NumberFormat中包含了对解析的支持。例如:
导入Java . util . locale;
导入Java . text . number format;
导入Java . text . parse exception;
公共类DecimalFormat5 {
公共静态void main(String args[]) {
//本地格式
number format nf1=number format . getinstance();
Object obj1=null
//基于格式的解析
尝试{
obj1=nf1.parse(1234,56 );
}
catch (ParseException e1) {
system . err . println(E1);
}
system . out . println(obj 1);
//德语格式
number format nf2=number format . getinstance(区域设置。德语);
Object obj2=null
//基于格式的解析
尝试{
obj2=nf2.parse(1234,56 );
}
catch (ParseException e2) {
system . err . println(E2);
}
system . out . println(obj 2);
}
}
这个例子分为两部分,两部分都解析一个字符串:“1234,56”。第一部分使用本地格式分析,第二部分使用德国格式分析。当程序在美国运行时,结果是:
123456
1234.56
换句话说,‘1234,56’在美国被视为一个巨大的整数‘123456’,在德国被视为一个小数‘1234.56’。
DecimalFormat和NumberFormat之间的关系
在上面的例子中,同时使用了DecimalFormat和NumberFormat。DecimalFormat通常用于获得良好的格式控制,而NumberFormat通常用于指定不同于本地的区域。两节课怎么结合?
答案围绕着DecimalFormat是NumberFormat的子类,它的实例被指定为一个特定的区域。因此,可以使用NumberFormat.getInstance指定一个区域,然后将该结构转换为DecimalFormat对象。文档中提到,这种技术在大多数情况下都可以应用,但是你需要用try/catch块将强制转换包围起来,以防强制转换无法正常工作(很可能在非常不清楚的情况下使用一个奇怪的区域)。以下是这方面的一个例子:
导入Java . text . decimal format;
导入Java。文字。数字格式;
导入Java。util。区域设置;
公共类十进制格式6 {
公共静态void main(String args[]) {
十进制格式df=null
//得到一个数字格式对象并
//h3制转换为一个十进制格式对象
尝试{
df=(十进制格式)数字格式。getinstance(区域设置。德语);
}
catch (ClassCastException e) {
系统。呃。println(e);
}
//设置格式模式
df。应用模式( # # # # #)。00000 );
//格式化一个数字
系统。出去。println(df。格式(1234.56));
}
}
getInstance()方法获得格式,然后调用applyPattern()方法设置格式模式,输出:
1234,56000
如果你不关心国际化,可以直接使用十进制格式。
其中v为未处理的双精度,刻度为需求精度,返回需要小数位数的两倍
公共静态双轮(双v,整数刻度){
if(scale0){
抛出新的IllegalArgumentException(
小数位数必须是正整数或零);
}
BigDecimal b=new BigDecimal(double。tostring(v));
BigDecimal one=new BigDecimal( 1 );
返回b.divide(一,小数,大十进制.四舍五入.double value();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。