Java中如何将double类型转换为特定精度的字符串

16

我想将 double 转化为 String。希望尽可能少的数字且最多6个。

所以我找到了 String.format("%.6f", d) 可以将我的 100.0 转换成 100.000000。 最大精度是正确的,但我希望将其转换为 100(最小精度)。 您有任何想法吗?


你尝试过使用.toString()方法吗? - user2591957
您是指删除所有精度(即转换为整数)吗? - Slate
嗯,也许这样会更容易。目前它将100.0 >“100.0”,但我可以截断末尾。此外,我可以使用子字符串来截取最后几位。如果没有更好的方法,那么就使用它。 - user3009344
不,希望最大精度为6个数字,但如果只有100.0000000,则应将其转换为100。 - user3009344
4个回答

22

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

10

这是一个简单而有效的技巧(不会引入任何舍入问题):

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

2

String.format("%.0f", d)将不会保留小数位。

-或-

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


2

你能不能创建一个类似这样的setPrecision函数呢?

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

当然,调用它。
setPrecision(variable, 2); //

显然,您可以调整它以进行四舍五入或其他所需操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接