在Java中使用尾数解析浮点数

时间:2012-06-22 22:36:58

标签: java floating-point double bigdecimal mantissa

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

例如:

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慢,这显示在密集处理中。

2 个答案:

答案 0 :(得分:6)

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

double根本不存储文字表示。 1.243544322E33 1.243544322E + 33。它们的价值相同。

现在,如果你想处理格式化 double值的方式回到String,这是另一回事 - 但解析你做得很好。你没有丢失任何信息。

答案 1 :(得分:2)

Jon如上所述是正确的,它在内存中正确表示。如果你希望它与尾数上的+一起显示,那么你正在谈论字符串格式化双。

Long winded official formatter reference

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%确定它会完成这项工作。格式说明符中的+强制它为任意数字放置一个+或 - 符号......我相信它会延伸到尾数。