为啥 NumberFormat 中需要以下 2 种方法?

Posted

技术标签:

【中文标题】为啥 NumberFormat 中需要以下 2 种方法?【英文标题】:Why is there a need of the 2 following methods in NumberFormat?为什么 NumberFormat 中需要以下 2 种方法? 【发布时间】:2013-08-26 10:42:17 【问题描述】:

我看到NumberFormat 有两个方法非常相似:

1)

abstract Number     parse(String source, ParsePosition parsePosition)

如果可能,返回一个 Long(例如,在 [Long.MIN_VALUE, Long.MAX_VALUE] 并且没有小数),否则为 Double。

2)

Object  parseObject(String source, ParsePosition pos)

从字符串中解析文本以生成数字。

在存在parse(s,ParseIndex) 的情况下,parseObject(..) 需要转换为所需的输出吗? 我知道第一种方法会抛出 ParseException 而后者不会。 只是想知道为什么需要这两种非常相似的方法。 提前致谢。

【问题讨论】:

【参考方案1】:

关于 JDK 最常听到的抱怨之一是为什么不能使用 Integer.parseInt 和类似方法来验证字符串,而不涉及昂贵的异常机制。 NumberFormat 似乎通过提供一种可以通过返回 null 来表示失败的方法来回答该投诉。

【讨论】:

搞笑的是子类DecimalFormat parse(String, ParsePosition)的同一个方法不抛出ParseException。 +1 以获得很好的答案。虽然我个人没有问这个问题,但你很好地解释了这个问题,让我想到为什么“我”会想要使用它。 @Rollerball 请注意,parse(String,ParsePosition)parse(String)parseObject(String,ParsePosition) 都在 NumberFormat 类中。那些接受ParsePosition 的方法不会抛出,它们使用这个对象来指示解析错误的位置。

以上是关于为啥 NumberFormat 中需要以下 2 种方法?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Intl.NumberFormat 不适用于 Safari 和 Firefox 中的单位?

Java NumberFormat 舍入模式,为啥一半格式 1.015 到 1.01 而不是 1.02

在现有文档中编辑 Range NumberFormat

使用 NumberFormat 格式化数字的 FieldPosition

在 Excel VBA 中使用 .NumberFormat 格式化小数位

Intl.NumberFormat.formatToParts 不是函数