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