我正在用Java编写一个计算器程序,我需要显示一个长度不超过15位的数字(包括小数点)。
我尝试用String.format("%g", myDouble)格式化这个数字,也用%f格式化,但是无法得到我想要的结果。
问题是我需要号码:
此外,我不想要小数点前后的任何固定数字。
有什么建议吗?
这是显示我的号码的代码片段:
if (("" + myDouble).length() > 15) {
screen.setText(String.format("%g", myDouble));
} else {
screen.setText("" + myDouble);
}一个问题是,当执行else子句时,有时数字被显示为9.0000E7,这是不合适的,并且与看起来更像9.000e+7的String.format("%g", myDouble)科学表示法不同。
发布于 2015-04-13 20:53:24
这似乎很接近你的要求:
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);但是如果你试图“阻止对齐”到某个最大值,那么事情就变得复杂了,因为小数位数的数量取决于指数中的数字数。
发布于 2015-04-13 20:45:17
只需使用NumberFormat对象即可。详情请参见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));
}https://stackoverflow.com/questions/29614274
复制相似问题