java中DecimalFormat四舍五入用法详解
DecimalFormat是NumberFormat的一个具体子类,用于格式化十进制数字。它可以支持不同类型的数,包括整数(123)、定点数(123.4)、科学记数法表示的数(1.23E4)、百分数(12%)和金额($123)这些内容的本地化。
下边先介绍下DecimalFormat的用法:
importjava.text.*; importjava.util.*; publicclassDecimalFormatDemo{ publicstaticvoidmain(Stringargs[]){ DecimalFormatdf1=newDecimalFormat("###,###.0000");//使用系统默认的格式 System.out.println(df1.format(111111123456.12)); Locale.setDefault(Locale.US); DecimalFormatdf2=newDecimalFormat("###,###.0000");//使用美国的格式 System.out.println(df2.format(111111123456.12)); //----------------------------alsouseapplypattern------------------------------// DecimalFormatdf3=newDecimalFormat(); myformat3.applyPattern("##,###.000"); System.out.println(df3.format(11112345.12345)); //-----------------控制指数输出-------------------------------------------------// DecimalFormatdf4=newDecimalFormat(); myformat4.applyPattern("0.000E0000"); System.out.println(df4.format(10000)); System.out.println(df4.format(12345678.345)); //------------------百分数的输出-------------------------------------------// DecimalFormatdf5=null; try{ df5=(DecimalFormat)NumberFormat.getPercentInstance(); }catch(ClassCastExceptione){System.err.println(e); } df5.applyPattern("00.0000%"); System.out.println(df5.format(0.34567)); System.out.println(df5.format(1.34567)); } }
(1)对于数据的四舍五入:
DecimalFormat包含一组符号,对于各符号的含义解释如下:
0一个数字
#一个数字,不包括0
.小数的分隔符的占位符
,分组分隔符的占位符
;分隔格式。
-缺省负数前缀。
%乘以100和作为百分比显示
?乘以1000和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。
X前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
例如:
DecimalFormatdf1=newDecimalFormat("###0.00");//保留两位小数,如果不足两位小数则自动补零 System.out.println(df1.format(124.367)); System.out.println(df1.format(124.3)); DecimalFormatdf2=newDecimalFormat("###0.##");//保留两位小数,不足两位则不补零 System.out.println(df2.format(124.6)); System.out.println(df2.format(124)); DecimalFormatdf3=newDecimalFormat("000.000");//保留三位小数,哪里不足位则补零 System.out.println(df3.format(24)); DecimalFormatdf=newDecimalFormat("0.000E0000");//指数 System.out.println(df.format(1234.56)); DecimalFormatnf=(DecimalFormat)NumberFormat.getPercentInstance();//百分数 System.out.println(nf.format(0.476354)); nf.applyPattern("00.00%"); System.out.println(nf.format(0.476354));
运行结果:
124.37 124.30 124.6 124 024.000 1.235E0003 48% 47.64%
(2)对于读取并解析包含格式化的数字的字符串?解析支持包含在NumberFormat中。例如:
importjava.util.Locale; importjava.text.NumberFormat; importjava.text.ParseException; publicclassDecimalFormat5{ publicstaticvoidmain(Stringargs[]){ //本地格式 NumberFormatnf1=NumberFormat.getInstance(); Objectobj1=null; //基于格式的解析 try{ obj1=nf1.parse("1234,56"); } catch(ParseExceptione1){ System.err.println(e1); } System.out.println(obj1); //德国格式 NumberFormatnf2=NumberFormat.getInstance(Locale.GERMAN); Objectobj2=null; //基于格式的解析 try{ obj2=nf2.parse("1234,56"); } catch(ParseExceptione2){ System.err.println(e2); } System.out.println(obj2); } }
运行结果:
123456//美国运行;被认为字符串 1234.56//德国运行;被认为一个小数
(3)对于DecimalFormat和NumberFormat:
DecimalFormat是NumberFormat的一个子类,其实例被指定为特定的地区。因此,你可以使用NumberFormat.getInstance指定一个地区,然后将结构强制转换为一个DecimalFormat对象。文档中提到这个技术可以在大多情况下适用,但是你需要用try/catch块包围强制转换以防转换不能正常工作(大概在非常不明显得情况下使用一个奇异的地区)。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。