深入理解DecimalFormat.format()方法

DecimalFormat这个类,这就是格式化数据的类

DecimalFormat可以处理科学计数法等问题,但是运行下面的语句会抛出错误:

import java.text.DecimalFormat;
public class BigDecimelTest {
    public static void main(String[] args) {
        System.out.println(new DecimalFormat("#").format("42412323545"));
    }
}
  • 来让我们看一下控制台打印:
Exception in thread "main" java.lang.IllegalArgumentException: Cannot format given Object as a Number
 at java.text.DecimalFormat.format(DecimalFormat.java:507)
 at java.text.Format.format(Format.java:157)
 at com.poi.BigDecimelTest.main(BigDecimelTest.java:7)

无法将给定对象格式化为数字,为什么无法将给定的对象格式化数字。
来我们分析一下源码:

@Override
    public final StringBuffer format(Object number,
                                     StringBuffer toAppendTo,
                                     FieldPosition pos) {
        if (number instanceof Long || number instanceof Integer ||
                   number instanceof Short || number instanceof Byte ||
                   number instanceof AtomicInteger ||
                   number instanceof AtomicLong ||
                   (number instanceof BigInteger &&
                    ((BigInteger)number).bitLength () < 64)) {
            return format(((Number)number).longValue(), toAppendTo, pos);
        } else if (number instanceof BigDecimal) {
            return format((BigDecimal)number, toAppendTo, pos);
        } else if (number instanceof BigInteger) {
            return format((BigInteger)number, toAppendTo, pos);
        } else if (number instanceof Number) {
            return format(((Number)number).doubleValue(), toAppendTo, pos);
        } else {
            throw new IllegalArgumentException("Cannot format given Object as a Number");
        }
    }

这里的有很多包装类,就没有String类和自定义类型,因而,就会出现了错误。所以,它没办法解释格式化String类型的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值