Java数字格式化

数字的格式化在解决工作中的问题使用普遍,Java中主要是对浮点型数据进行数字格式化操作,可以使用java.text.DecimalFormat。

Java中没有进行格式化的数字表示原则是数字绝对值大于0.001或小于1000000则使用常规数字形式表示。反之则使用科学计算法表示。

DecimalForamat是NumberFormat的一个子类,用于格式化十进制数字。可以将数字格式化为整数,浮点数( 小数)、科学计数法表示的数、百分数等等。

使用构造方法创建:DecimalFormat()创建初始化对象后可通过 applyPattern(String pattern)指定模板或者直接用DecimalFormat(String pattern)创建。

指定的模板不包含逗号则会将NumberFormat属性groupingUse设置为false,即使用setGroupingSize(int size)指定分组大小也不能起效,此时可用setGroupingUse方法让其起效。

同样可以用以下方式实例化:

DecimalFormat df=(DecimalFormat)NumberFormat.getInstance(); 

DecimalFormat df1=(DecimalFormat) DecimalFormat.getInstance(); 

默认小数位数为3位,如: 
    DecimalFormat df=(DecimalFormat)NumberFormat.getInstance(); 
    System.out.println(df.format(12.3456)); 
输出:12.346(四舍五入) 
现在可以通过如下方法把小数为设为两位: 
 df.setMaximumFractionDigits(2); 
 System.out.println(df.format(12.3456789)); 
则输出为:12.35 
将数字转化为百分比输出 
  df.applyPattern("##.##%"); 
    System.out.println(df.format(12.3456789)); 
    System.out.println(df.format(1)); 
    System.out.println(df.format(0.015)); 
输出分别为:1234.57%    100%      1.5% 

设置分组大小 :
     DecimalFormat df1=(DecimalFormat) DecimalFormat.getInstance(); 
df1.setGroupingSize(2); 
    System.out.println(df1.format(123456789)); 
输出:1,23,45,67,89 

设置小数为必须为2位 
    DecimalFormat df2=(DecimalFormat) DecimalFormat.getInstance(); 
  df2.applyPattern("0.00"); 
    System.out.println(df2.format(1.2)); 
输出:1.20 




例子: 
import java.text.*; 

public class Untitled1    { 
   public static void main(String[] args) { 

     //--------------------------------------------- 
     //定义一个数字格式化对象,格式化模板为".##",即保留2位小数. 
     DecimalFormat a = new DecimalFormat(".##"); 
     String s= a.format(333.335); 
     System.err.println(s); 
     //说明:如果小数点后面不够2位小数,不会补零.参见Rounding小节 
     //--------------------------------------------- 

     //----------------------------------------------- 
     //可以在运行时刻用函数applyPattern(String)修改格式模板 
     //保留2位小数,如果小数点后面不够2位小数会补零 
     a.applyPattern(".00"); 
     s = a.format(333.3); 
     System.err.println(s); 
     //------------------------------------------------ 

     //------------------------------------------------ 
     //添加千分号 
     a.applyPattern(".##\u2030"); 
     s = a.format(0.78934); 
     System.err.println(s);//添加千位符后,小数会进三位并加上千位符 
     //------------------------------------------------ 

     //------------------------------------------------ 
     //添加百分号 
     a.applyPattern("#.##%"); 
     s = a.format(0.78645); 
     System.err.println(s); 
     //------------------------------------------------ 

    //------------------------------------------------ 
     //添加前、后修饰字符串,记得要用单引号括起来 
     a.applyPattern("'这是我的钱$',###.###'美圆'"); 
     s = a.format(33333443.3333); 
     System.err.println(s); 
     //------------------------------------------------ 

      //------------------------------------------------ 
     //添加货币表示符号(不同的国家,添加的符号不一样 
     a.applyPattern("\u00A4"); 
     s = a.format(34); 
     System.err.println(s); 
     //------------------------------------------------ 

     //----------------------------------------------- 
     //定义正负数模板,记得要用分号隔开 
      a.applyPattern("0.0;'@'-#.0"); 
      s = a.format(33); 
      System.err.println(s); 
      s = a.format(-33); 
      System.err.println(s); 
      //----------------------------------------------- 
    
     //综合运用,正负数的不同前后缀 
     String pattern="'my moneny'###,###.##'RMB';'ur money'###,###.##'US'"; 
     a.applyPattern(pattern); 
     System.out.println(a.format(1223233.456)); 
   } 


总结: 
要生成一个DecimalFormat对象,一般只要通过NumberFormat类工厂的getInstance()来取得一个 NumberFormat对象再将其转换成DecimalFormat对象,然后通过DecimalForat对象的applyPattern()来动态 改变数据的现示格式模板,通过format()方法取得格式化后的数字。同时,DecimalFormat提供了许多的方法来返回格式化后的数字的某一部 份,这些方法如:getNegativeSuffix()。这个类的难点主要是在模板的书写及理解上。其实主要的就是针对一个数字的正负形式来设定不同的 格式显示。这里要特别注意的是使用在模板上的特殊字符代表有特殊的意义,如下表所示: 
Symbol    Description 
0    a digit 
#    a digit, zero shows as absent 
.    placeholder for decimal separator 
,    placeholder for grouping separator 
E   separates mantissa and exponent for exponential formats 
;    separates formats 
-    default negative prefix 
%    multiply by 100 and show as percentage 
?    multiply by 1000 and show as per mille 
¤    currency sign; replaced by currency symbol; if doubled, replaced by international currency symbol; if present in a pattern, the monetary decimal separator is used instead of the decimal separator  
X    any other characters can be used in the prefix or suffix 
'    used to quote special characters in a prefix or suffix 


你可能感兴趣的:(Java)