java - 如何将小数点后 10 到 5 的幂四舍五入

标签 java math rounding

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

我想将这个数字四舍五入到小数点后 5 位,并保留 10“E11”的幂。 我尝试了这段代码

rounded = Math.round(subnitOut * 100000.0)/100000.0;

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

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

最佳答案

要以科学记数法格式化 float ,使其仅显示 5 位小数,同时保留指数,您可以使用以下命令:

double d = 9.2233720368E11;

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

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

>> 9.22337E11

正如您所知,传递给 DecimalFormat 构造函数的 0 数量(在 E 之前)决定了要打印的小数位数。附加到 E0 数量决定了指数使用多少位数字。这也会对 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);
}

用法:

double d = 9.2233760368E11;

System.out.println(format(d, 5, 1));

>> 9.22338E11

关于java - 如何将小数点后 10 到 5 的幂四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440731/

相关文章:

java.io.FileNotFoundException : content://com. android.contacts/contacts/24093/photo 仅适用于旧照片

java - 匹配最多 2 位小数的数字的正则表达式

java - 数学表达式二叉树

c - 3d 加速度计计算方向

Java 将 double 舍入为任意数 (9)

swift - 四舍五入到两位有效数字

java - 如何为单个对象添加连续 LOD?

java - 如何在返回 hashmap 时设置 xml 的父元素

android - 使用 Haversine 公式创建方法,Android V2

c# - 为什么在 C# 中添加多个 double 时顺序会影响舍入