我需要在小数点后打印四舍五入到可变位数的双精度数,这样就不会打印出无效的零。例如。我希望数字123和123.4都按原样打印 - 第一个没有小数点,第二个没有小数点。如果小数点后有多位有效数字,则该数字应截断为六位数。
如果您将数字打印为boost::locale::format("{1,number}") % double_value
,我所描述的是boost :: locale :: format的默认行为。我需要的是在Java中做同样的事情,最好使用String.format。我尝试了%f
和%g
,但两者都打印了至少六位数字。
我要格式化的所有数字都在[0.1,30000]范围内,所以转向科学形式不应该是一种痛苦。
答案 0 :(得分:5)
按照here的说明使用DecimalFormat。
DecimalFormat df = new DecimalFormat("#0.######");
df.format(0.912385);
答案 1 :(得分:2)
在Java中格式化浮点数有多种方法。
首先,格式字符串允许您指定精度。以下代码
System.out.printf("%.2f - %.2f", 123, 123.4)
将显示123.00 - 123.40
。请注意,这并不是您要求的,因为显示的数字始终有两个小数位。
要更好地控制数字格式,可以使用DecimalFormat
类。以下代码包含您描述的行为:
DecimalFormat form = new DecimalFormat("#.##");
form.setRoundingMode(RoundingMode.HALF_UP);
System.out.printf("%s - %s", form.format(123), form.format(123.4));
输出:123 - 123.4
。
答案 2 :(得分:-1)
使用:
String.format("%.2f", floatValue);