我想将double
转换为String
。我希望它尽可能少,最多6位。
所以我发现String.format("%.6f", d)
会将我的100.0
转换为100.000000
。
最大精度可以正常工作,但我希望它转换为100
(最小精度)。
你知道哪种方法有效吗?
答案 0 :(得分:20)
使用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);
答案 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); //
显然你可以调整它以进行舍入或者你需要做什么。