Java具有特定精度的双精度字符串

时间:2013-12-03 14:06:51

标签: java string format double

我想将double转换为String。我希望它尽可能少,最多6位。

所以我发现String.format("%.6f", d)会将我的100.0转换为100.000000。 最大精度可以正常工作,但我希望它转换为100(最小精度)。 你知道哪种方法有效吗?

4 个答案:

答案 0 :(得分:20)

使用DecimalFormatnew 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);

答案 1 :(得分:3)

这是一个有效的廉价黑客(并没有引入任何舍入问题):

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

答案 2 :(得分:1)

String.format("%.0", d)不会给你小数位

-OR -

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

答案 3 :(得分:0)

你不能创建一个setPrecision函数,有点像这样

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

然后当然称之为

setPrecision(variable, 2); //

显然你可以调整它以进行舍入或者你需要做什么。