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类型的数据。