我正在研究Java中的计算器程序,我需要显示一个长度不超过15位的数字(包括小数点)。
我尝试使用String.format("%g", myDouble)
和%f
格式化此数字,但无法获得我正在寻找的结果。
问题是我需要这个号码:
另外,我不希望在小数点之前或之后有任何固定的位数。
有什么建议吗?
这是我的号码显示的代码snipet:
if (("" + myDouble).length() > 15) {
screen.setText(String.format("%g", myDouble));
} else {
screen.setText("" + myDouble);
}
一个问题是,当执行else
子句时,有时数字会显示为9.0000E7
,这不是有利的,并且与String.format("%g", myDouble)
科学符号不同,后者看起来更像9.000e+7
。
答案 0 :(得分:0)
只需使用NumberFormat
对象即可。有关详细信息,请参阅the javadoc。
NumberFormat formatter = new DecimalFormat();
if (("" + myDouble).length() > 15) {
formatter = new DecimalFormat("0.######E0");
screen.setText(formatter.format(myDouble));
} else {
formatter = new DecimalFormat("#");
screen.setText(formatter.format(myDouble));
}
答案 1 :(得分:0)
这似乎与您要求的接近:
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);
但是,如果你正试图阻止对齐"事情变得复杂,因为分数的数量取决于指数中的位数。