栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用DecimalFormat进行格式化会引发异常-“无法将给定对象格式化为数字”

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用DecimalFormat进行格式化会引发异常-“无法将给定对象格式化为数字”

format()
方法
DecimalFormat
超载。

在工作情况下,您正在调用:

 public final String format(double number)

在失败的情况下,您正在调用:

 public final String format (Object obj)

第一种方法有一个非常具体的参数。它期望一个

double

与第二种情况不同,接受的类型非常广泛:

Object
在这种情况下,对传递的类型的检查在运行时执行。

通过提供一个不是a

double
而是a 的参数,
String
调用的方法是第二个方法。

引擎盖下,此方法依赖于

format(Object number, StringBuffer toAppendTo, FieldPositionpos)
一个期望的方法
number
的论点,即是实例
Number
类(
Short
Long
,…
Double
):

@Overridepublic 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
实例传递给它。

要解决该问题,可以

double
像成功案例中那样传递原语,也可以将您
String
转换为
Number
诸如
Double
with
的实例
Double.valueOf(yourString)

我建议采用第一种方式(通过
double
),因为它在已经使用
double
原语的代码中更加自然。
第二个需要从
String
到的附加转换操作
Double




转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号