我想转换 double 进入 String. 。我希望它拥有尽可能少的数字,并且最大的数字6。

所以我找到了 String.format("%.6f", d) 转换我的 100.0 进入 100.000000。 Max Precision正常工作,但我希望将其转换为 100 (最低精度)。您知道什么方法是这样起作用的吗?

有帮助吗?

解决方案

利用 DecimalFormat: new DecimalFormat("#.0#####").format(d).

这将产生具有1到6个小数位数的数字。

自从 DecimalFormat 将使用默认场所的符号,您可能需要提供用于使用的符号:

//Format using english symbols, e.g. 100.0 instead of 100,0
new DecimalFormat("#.0#####", DecimalFormatSymbols.getInstance( Locale.ENGLISH )).format(d)

为了格式100.0至100,请使用格式字符串 #.######.

注意 DecimalFormat 默认情况下会圆形,例如,如果您传递 0.9999999 您将获得输出 1. 。如果你想得到 0.999999 相反,提供不同的圆形模式:

DecimalFormat formatter = new DecimalFormat("#.######", DecimalFormatSymbols.getInstance( Locale.ENGLISH ));
formatter.setRoundingMode( RoundingMode.DOWN );
String s = formatter.format(d);

其他提示

这是一个可行的廉价黑客(并且不引入任何舍入问题):

String string = String.format("%.6f", d).replaceAll("(\\.\\d+?)0*$", "$1");

String.format("%.0", d) 不会给你十进制的地方

-或者-

String.format("%d", (int)Math.round(f))

你不能只是做一个 setPrecision 功能,有点像这样

private static String setPrecision(double amt, int precision){
   return String.format("%." + precision + "f", amt);
}

然后当然要称呼它

setPrecision(variable, 2); //

显然,您可以将其划到舍入或您需要做的任何事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top