java中对浮点数精度的处理DecimalFormat

时间:2021-03-08 02:56:39

DecimalFormat是一个队浮点数进行格式化输出的利器,比如我们要输出一个保留一位小数的浮点数,可以键入如下代码:

DecimalFormat df = new DecimalFormat("0.0") //一个包括0的保留一位小数的浮点数字

float num = 0.123;

df.format(num);

上面的3行代码即可对num进行格式设置

结果会输出0.1   注:改方法会对数字进行4舍5入

下面给出通该类中的通配符:

0 一个数字

# 一个数字,不包括 0

. 小数的分隔符的占位符

, 分组分隔符的占位符

; 分隔格式。

- 缺省负数前缀。

% 乘以 100 和作为百分比显示

? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用

国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代

替十进制分隔符。

X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。

上面便是具体的通配符,看不明白?好,下面是API中的一个例子

格式:"0.###E0"      输入: 1234    输出: "1.234E3"

至于其他复杂的情形,可以直接去参考API,这里不一一列举

更一般的处理数字的方法是NumberFormat,即DecimalFormat的父接口,通过调用NumberFormat的工厂方法来解析数字,比如带有科学计数法的数字解析,实例如下

float content = 123.4f;  
DecimalFormat df = new DecimalFormat("#.#E0") 
NumberFormat nf = NumberFormat.getNumberInstance();
try {
Number number = nf.parse(df.format(cotent));
content = number.toString();
BigDecimal bd = new BigDecimal(content);
content = bd.toPlainString();//JDK1.5才有 1.4用content = bd.toString(); } catch (ParseException e) { }

  解析前的输出 1.2E2 解析后的为120。更加具体的操作可以参考 http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4