我正在使用 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
之前)决定了要打印的小数位数。附加到 E
的 0
数量决定了指数使用多少位数字。这也会对 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/