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

2022-09-03 09:57:19

我想转换为.我希望它具有尽可能少的数字,并且最多为6。doubleString

所以我找到了将我的转换为.最大精度工作正常,但我希望将其转换为(最小精度)。您知道哪种方法可以像这样工作吗?String.format("%.6f", d)100.0100.000000100


答案 1

用:。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,请使用格式字符串 。#.######

请注意,默认情况下将舍入,例如,如果您传入,您将获得输出。如果要改为获取,请提供不同的舍入模式:DecimalFormat0.999999910.999999

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

答案 2

这是一个便宜的黑客,可以工作(并且不会引入任何舍入问题):

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