如何使 NumberFormat 以双重类型返回 [重复]

Posted

技术标签:

【中文标题】如何使 NumberFormat 以双重类型返回 [重复]【英文标题】:How to make NumberFormat returns in double-type [duplicate] 【发布时间】:2013-10-19 04:51:01 【问题描述】:

下面的函数完美运行,但我想让它以双精度格式返回值,因为下面的函数以字符串格式返回值。

private static String convertMoneyToSap(double val) 
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
    nf.setGroupingUsed(false);
    return nf.format(val); //--> I would like this to return in double format

我该怎么做?谢谢。


更新

当我尝试使用:return Double.parseDouble(nf.format(val)) 时,出现错误:

An error occurred: java.lang.NumberFormatException

上面函数的使用示例如下:

convertMoneyToSap(1234567.89); //--> The expected result: 1234567,89

上述函数的预期结果是以字符串形式返回。当我尝试使用Double.parseDouble() 时,它会收到一条错误消息。


更新 2

Double.parseDouble("1234,99") //--> will return error
Double.parseDouble("1234.56") //--> will return successful

问题是,nf.format(val) 将返回类似于:1234,99 的内容,而当涉及到 return Double.parseDouble(nf.format(val)) 时,它将返回错误。

【问题讨论】:

可能重复:***.com/a/5769679/1091781 从double转换为Double是什么意思?它们基本相同 “双格式”是什么意思?结果应该是什么样子(对于给定的输入)? @IlyaBursov:是的,他们是。但我想更改语言环境,使其返回类似:123.456,78 而不是123,456.78 所以你想将双精度转换为字符串,这就是你当前的代码所做的 【参考方案1】:

你可以使用:

   Double.parseDouble();

仅当您希望将通过字符串表示的值转换为其对应的双精度值时。

对您问题的回答将取决于 nf.format(val) 返回的内容。

++++++++++++++++++++

如果您希望方法返回 double 或 Double 的值,则不能使用表示小数点的 ',' 分隔符(基于本地化)。 double 将 123.54 仅表示为 123.54,而不是 123,54。

如果您想使用本地化格式,请将其设为字符串。否则,将小数点前后的值拆分为两个不同的双精度变量,并以最适合您的格式表示它们(即您自己处理本地化工作)。

Double.parseDouble() 不适用于本地化或特殊格式的字符串。

【讨论】:

所以你给我一个double 和.. 我必须做所有这些工作才能得到一个Double? (而且我什至不确定它是否能在所有语言环境中正常工作!)如果这是最终目标,为什么不 Double.valueOf(val) 查看这里以了解更多关于 valueOf 和 parseDouble 之间的区别:***.com/questions/10577610/… 我不明白这有多重要。如果出于某种奇怪的原因,想要一个 Double-that-did-not-reference-equal-any-other-Double,可以使用 new Double(val) 这真是太疯狂了!您不使用 valueOf 或 parseDouble 将 double 转换为 Double。你知道双倍和双倍的区别吗? 问题是“以双精度格式返回值”,因此得到了答复。同意……没用。我没有先检查方法。用户似乎想要将 123,456.78 转换为 123.456,78。因此,我对此的回应无效。【参考方案2】:

将返回类型更改为double,并将return语句更改为:

Double.parseDouble(nf.format(val));

【讨论】:

谢谢,但它返回错误,请参阅上面的更新。【参考方案3】:

使用Double.parseDouble()

替换为

return Double.parseDouble(nf.format(val));

并将方法的返回类型设为 Double。

更新答案

在 return 语句之前包含 val=val.replaceAll(",", "\\.");

【讨论】:

谢谢,但它返回错误,请参阅上面的更新。 @mrjimoy_05 更新了答案。

以上是关于如何使 NumberFormat 以双重类型返回 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java—NumberFormat与DecimalFormat类

如何使父类返回可以匹配子类型的类型?

在共享包中使用 GWT 的 NumberFormat 类

修改 NumberFormat.getCurrencyInstance() 返回的 NumberFormat

如何使 postgres 避免对此搜索分页查询进行双重顺序扫描?

Typescript 接口合并以使返回类型更具体