在Java中打印double,不包括无效的零

时间:2015-01-27 08:12:27

标签: java formatting precision

我需要在小数点后打印四舍五入到可变位数的双精度数,这样就不会打印出无效的零。例如。我希望数字123和123.4都按原样打印 - 第一个没有小数点,第二个没有小数点。如果小数点后有多位有效数字,则该数字应截断为六位数。

如果您将数字打印为boost::locale::format("{1,number}") % double_value,我所描述的是boost :: locale :: format的默认行为。我需要的是在Java中做同样的事情,最好使用String.format。我尝试了%f%g,但两者都打印了至少六位数字。

我要格式化的所有数字都在[0.1,30000]范围内,所以转向科学形式不应该是一种痛苦。

3 个答案:

答案 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);