今天用到了又闲来无事,就把这个格式化总结一下,也和大家分享一下

主要使用的类:java.text.DecimalFormat 


1。实例化对象,可以用如下两种方法: 


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

     因为DecimalFormat继承自NumberFormat。 


2。设定小数位数 


系统默认小数位数为3,如: 


DecimalFormat df=(DecimalFormat)NumberFormat.getInstance();  
    System.out.println(df.format(12.3456789));

输出:12.346 


现在可以通过如下方法把小数为设为两位: 


df.setMaximumFractionDigits(2);  
    System.out.println(df.format(12.3456789));


则输出为:12.35 


3。将数字转化为百分比输出,有如下两种方法: 


(1) 


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% 


(2) 


df.setMaximumFractionDigits(2);  

    System.out.println(df.format(12.3456789*100)+"%");  

    System.out.println(df.format(1*100)+"%");  

    System.out.println(df.format(0.015*100)+"%");

输出分别为: 


1,234.57%     100%     1.5% 


4。设置分组大小 


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

df1.setGroupingSize(2);  

    System.out.println(df1.format(123456789));



输出:1,23,45,67,89 


还可以通过df1.setGroupingUsed(false);来禁用分组设置,如: 


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

    df1.setGroupingSize(2);  

df1.setGroupingUsed(false);  

    System.out.println(df1.format(123456789));



输出:123456789 


5。设置小数为必须为2位 


DecimalFormat df2=(DecimalFormat) DecimalFormat.getInstance();  

  df2.applyPattern("0.00");  

    System.out.println(df2.format(1.2));



输出:1.20 



因为我是数据是解密出来的,是字符串,所以在用的时候出现了 Cannot format given Object as a Number 错误,也就是“不能将给定的对象格式化为一个数字”。其实说来简单,毕竟String的范围大,数字的范围小(说成是范围可能不是那么规范,但是个人感觉最贴切。)是不能从大的范围转换成小的范围的。接下来我的操作是(附带了其他的一些总结):


String   s   =    "123.456 " ;   //要确保字符串为一个数值,否则会出异常
double    d   =   Double.parseDouble(s); 
float    f   =   Float.parseFloat(s);
int i = Integer.parseInt([String]);//[String]待转换的字符串



这样先把要字符串转成数字再格式化就一切OK啦!



其实我觉得在后台操作有点麻烦,就也在前台进行了格式化操作。(但是我的项目有些是必须要在后台操作的,上面的也是迫于无奈!哈哈)

下面是在jsp中实现的数据格式化

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>



jstl fmt 函数大全 

主要功能格式化 

日期格式(2008年5月5日22点00分23秒) 

<fmt:formatDate value="<%=new Date() %>" pattern="yyyy年MM月dd日HH点mm分ss秒" />



保留两位小数 

<fmt:formatNumber value="123.123456789" pattern="0.00"/>



格式数字(45,678.234) 

<fmt:formatNumber type="number" value="45678.2345" />



格式百分比(23%) 

<fmt:formatNumber type="percent" value="0.2345" /> 
<fmt:formatNumber  value="${item.DD_NUM/item.TOL_NUM}" type="number" pattern="0.00%" />


由于的数据是后台查出来之后显示在input标签里的,所以在引用标签的时候 在input标签的value=""中是这么写的:

value="<fmt:formatNumber value='${goods.price}' pattern='0.00'/>"

顺带着记录一下  input标签里面的信息不能被选中复制修改等 可以使用οncοpy="return false;" oncut="return false;"  required="true" readonly="readonly"属性。