今天用到了又闲来无事,就把这个格式化总结一下,也和大家分享一下
主要使用的类: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"属性。