java - java中的双数字格式化

标签 java string formatting

我正在用 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/

相关文章:

java - 使用 BufferedReader 和 FileReader 从文件中读取

c - 如何在C中保存输入的字符串和整数

arrays - 如何在 Rust 中为 Vec<String> 编写计数器函数?

html - 父容器不扩展到子元素

java - 仅使用 1 个 for 循环

java - Spring Webapp 在没有控制台日志的情况下抛出 404 错误

java - 我们如何根据 spring-boot 或 java 或 python 中的资源文件中的动态变量检索文本响应

php - PhpStorm 是否有办法突出显示硬编码字符串?

r - 更改绘图中 y 轴的格式

javascript - 是否有任何工具可以将 JavaScript 重写为每个函数形式一个变量?