如何将 Double 转换为具有指数符号的字符串

Posted

技术标签:

【中文标题】如何将 Double 转换为具有指数符号的字符串【英文标题】:How to convert Double to String with exponential sign 【发布时间】:2019-05-30 15:16:23 【问题描述】:

我想将 Double 转换为带有指数符号的字符串。 例如,Double 值是4.4395749E7,转换为String 后应该是4.4395749E+07(与MS Excel 中的显示相同)。

我试过double.toString(),但它正在转换为4.4395749E7

Double doubleValue = 44395749d;
doubleValue.toString();

预期为4.4395749E+07,但实际为4.4395749E7

【问题讨论】:

我不知道你为什么这么期待;您将获得标准的 Java 双字符串转换。最简单的方法是拆分并添加额外的数字,尽管可能有一个库可以做到这一点。 有点不清楚你到底想要什么。您是说 E 应该始终跟随指数的符号和 2 个有效数字吗?如果它大于 2 个有效数字怎么办?无论如何,如果您希望将输出写入 Excel 电子表格,我建议您查看 Apache POI 库。从长远来看,这可能比复制和粘贴要容易得多,这似乎是您打算做的事情。 【参考方案1】:

你可以使用String.format(),E是指数的格式代码

Double doubleValue = 44395749d;
System.out.println(String.format("%E", doubleValue));

【讨论】:

这会将最后一个小数位切割成4.439575E+07,而不是4.4395749E+07。也许提及语言环境参数(String.format(Locale.ENGLISH, "%E", value))也很有用。【参考方案2】:

您可以使用DecimalFormat 格式化您的号码:

Double value = 44395749d;
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
if (value > 1 || value < -1) 
    symbols.setExponentSeparator("E+");

DecimalFormat decimalFormat = new DecimalFormat("0E00", symbols);
decimalFormat.setMaximumFractionDigits(Integer.MAX_VALUE);
System.out.println(decimalFormat.format(value));

如果需要,这将使用DecimalFormatSymbols 为指数添加+value &gt; 1value &lt; -1)。要获取所有小数位数,请使用setMaximumFractionDigits(Integer.MAX_VALUE)。如果需要,您可以简单地更改格式。

结果将是4.4395749E+07

如果需要,请记住设置特定的语言环境:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH)

【讨论】:

以上是关于如何将 Double 转换为具有指数符号的字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中将指数和系数转换为整数值

unity 3d-大分数数字变成指数 C# [关闭]

如何将有符号的long型转换成无符号的long型

Java字符串指数[关闭]

C# Double to String 没有指数

C语言中printf输出float和double都用%f么(scanf又如何)