【问题标题】:Parsing a floating point number with mantissa in Java在 Java 中用尾数解析浮点数
【发布时间】:2012-06-22 22:36:57
【问题描述】:

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

【问题讨论】:

  • 不要用 toString 打印,使用 NumberFormat 的实例。

标签: java floating-point double bigdecimal mantissa


【解决方案1】:

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

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

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

【讨论】:

  • 当然。我并不担心信息丢失,只是 + 号是我的应用程序所必需的。
【解决方案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% 确定它会完成这项工作。格式说明符中的 + 强制它为任何数字放置一个 + 或 - 符号......我相信这会延伸到尾数。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多