1

使用标准 JavaDouble类来解析带有尾数的浮点数似乎省略了指数中的 + 号。

例如:

Double.parseDouble("1258124354E-28") returns 1.258124354E-19, but
Double.parseDouble("1243544322E+24") returns 1.243544322E33 (not E+33)

有什么方法可以使用 Double 获得 + 符号,而无需字符串后处理?

BigDecimal门课做得更好,例如

new BigDecimal("1243544322E+24").toString() does return 1.243544322E+33

但它通常比 慢Double,这在密集处理中表现出来。

4

2 回答 2

6

您需要区分存储在 a 中的double及其字符串表示形式。

Adouble根本不存储文本表示。1.243544322E331.243544322E+33。它们是相同的值。

现在,如果您想研究如何将值格式化double回 a ,String那是另一回事 - 但您正在做的解析很好。您不会丢失任何信息。

于 2012-06-22T22:40:08.507 回答
2

乔恩如上所述是正确的,它在记忆中正确地表示它。如果您希望它在尾数上显示 + ,那么您正在谈论格式化双精度的字符串。

冗长的官方格式化程序参考

import java.util.Formatter;

double myDouble = Double.parseDouble("1243544322E+24");

Formatter formatter = new Formatter();
formatter.format("%+E", myDouble); //This should return with what you want, though with an extra + infront of the number

我没有运行这段代码,所以我不能 100% 确定它会完成这项工作。格式说明符中的 + 强制它为任何数字放置一个 + 或 - 符号......我相信这会延伸到尾数。

于 2012-06-22T23:02:05.800 回答