我正在用 Java 编写一个计算器程序,我需要显示一个长度不超过 15 位数字的数字(包括小数点)。
我尝试使用 String.format("%g", myDouble)
以及 %f
格式化此数字,但无法获得结果我正在寻找。
问题是我需要这个号码:
- 如果超过 15 位数字,则显示为科学记数法,
- 如果数字少于 15 位,则显示而不进行四舍五入。
此外,我不希望小数点之前或之后有任何固定位数。
有什么建议吗?
这是显示我的号码的代码片段:
if (("" + myDouble).length() > 15) {
screen.setText(String.format("%g", myDouble));
} else {
screen.setText("" + myDouble);
}
一个问题是,当执行else
子句时,有时数字会显示为9.0000E7
,这是不利的,并且与String不同.format("%g", myDouble)
科学记数法,看起来更像 9.000e+7
。
最佳答案
这似乎接近您的要求:
static String format(double n) {
if(Double.isInfinite(n) || Double.isNaN(n))
return Double.toString(n);
String result = BigDecimal.valueOf(n).toPlainString();
if(result.length() > 15)
result = String.format("%.15e", n);
return result;
}
由于您的要求是小数位不固定,所以我真的没有找到专门使用格式化程序来完成此操作的方法。
如果您想要科学计数法的特定位数,则可以使用类似 "%.15e"
的格式,其中 15
是十进制位数你想要的。
或者您可能想要类似的东西:
if(result.length() > 15)
result = new DecimalFormat("0.###############E0").format(n);
但是,如果您尝试“阻止对齐”到某个最大值,那么事情就会变得复杂,因为小数位数取决于指数中的位数。
关于java - java中的双数字格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29614274/