锄头可以将10到5位小数的数字舍入

时间:2017-04-16 18:40:28

标签: java math rounding

我正在使用Java进行一些计算。结果有一个复杂的格式,如“9.2233720368E11”。

我希望将此数字舍入为5位小数并保持10“E11”的幂。 我试过这段代码

$(document).ready(function() {
    // todo
});

工作正常,直到结果中出现10(E)的幂,然后它根本不起作用。

有没有办法直接这样做?或者我必须将其作为文本处理并使用文本方法来修剪不需要的数字。

1 个答案:

答案 0 :(得分:4)

要以科学计数法格式化浮点数,以便在保留指数时仅显示5位小数,可以使用以下内容:

double d = 9.2233720368E11;

DecimalFormat df = new DecimalFormat("0.00000E0");

System.out.println(df.format(d));

>> 9.22337E11

正如您所知,传递给0构造函数的DecimalFormat的数量(在E之前)决定了要打印的小数位数。附加到0的{​​{1}}的数量决定了指数使用的位数。这也是E的四舍五入,因此double会产生9.2233760368E11

编辑:我已经创建了一个方法,以防您需要以不同方式格式化结果。

9.22338E11

用法:

public static String format(double d, int numDecimalPlaces, int numExponentDigits) {
    StringBuilder sb = new StringBuilder("0.%0");

    sb.append(numDecimalPlaces);
    sb.append("d");
    sb.append("E");
    sb.append("%0");
    sb.append(numExponentDigits);
    sb.append("d");

    return new DecimalFormat(String.format(sb.toString(), 0, 0)).format(d);
}