decimalformat.format,decimal的使用

decimalformat.format,decimal的使用,DecimalFormat多种用法详解

本文主要详细介绍了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

//得到一个数字格式对象并

//strong制转换为一个十进制格式对象

尝试{

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(1,scale,BigDecimal .四舍五入.double value();

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: