首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的双数字格式设置

java中的双数字格式设置
EN

Stack Overflow用户
提问于 2015-04-13 20:16:36
回答 2查看 1.1K关注 0票数 0

我正在用Java编写一个计算器程序,我需要显示一个长度不超过15位的数字(包括小数点)。

我尝试用String.format("%g", myDouble)格式化这个数字,也用%f格式化,但是无法得到我想要的结果。

问题是我需要号码:

  • 如果它有超过15位数,则显示为科学符号,
  • 或者,如果它小于15位数,则显示它而不舍入它。

此外,我不想要小数点前后的任何固定数字。

有什么建议吗?

这是显示我的号码的代码片段:

代码语言:javascript
复制
if (("" + myDouble).length() > 15) {
    screen.setText(String.format("%g", myDouble));
} else {
    screen.setText("" + myDouble);
}

一个问题是,当执行else子句时,有时数字被显示为9.0000E7,这是不合适的,并且与看起来更像9.000e+7String.format("%g", myDouble)科学表示法不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-13 20:53:24

这似乎很接近你的要求:

代码语言:javascript
复制
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是您想要的十进制数。

或者你想要这样的东西:

代码语言:javascript
复制
if(result.length() > 15)
    result = new DecimalFormat("0.###############E0").format(n);

但是如果你试图“阻止对齐”到某个最大值,那么事情就变得复杂了,因为小数位数的数量取决于指数中的数字数。

票数 1
EN

Stack Overflow用户

发布于 2015-04-13 20:45:17

只需使用NumberFormat对象即可。详情请参见javadoc

代码语言:javascript
复制
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));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29614274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档