如何将 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 > 1
或value < -1
)。要获取所有小数位数,请使用setMaximumFractionDigits(Integer.MAX_VALUE)
。如果需要,您可以简单地更改格式。
结果将是4.4395749E+07
。
如果需要,请记住设置特定的语言环境:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH)
【讨论】:
以上是关于如何将 Double 转换为具有指数符号的字符串的主要内容,如果未能解决你的问题,请参考以下文章