固定宽度浮点数格式

5
在Java中,我有以下代码:
System.out.printf("%05.5f", myFloat);

这适用于任何小于10的数字都能很好地工作,但对于任何大于或等于10的数字,小数位将被截断为5个,但这并不能弥补小数点前的数字更长的事实。我想做以下其中之一:
12.3456
1.23456

(即,相同数量的数字),或:
12.34567
 2.34567
< p > (即,在数字点和最后一位数字对齐时填充空格)。< /p > < p > 如果我能让任何一个工作,我会很高兴(两个都更好!)。< /p > < p > 有什么想法吗?谢谢!< /p >

1
你知道你需要的最大宽度吗?如果知道,就直接使用那个宽度而不是5。 - Ted Hopp
你的意思是像“%05f”这样吗?如果是,那行不通。我得到的是:29.979748然后是7.449038(小数点后有相同数量的数字,但没有前导空格或0)。 - joshlf
我的意思是这一行“%08.5f”——让它更宽些。 - Ted Hopp
是的,我最终想出了如何做到这一点。请参考@marko-topolnik在我的答案中的评论。 - joshlf
1个回答

7
我已经找到了让它实现以下功能的方法:
12.34567
 2.34567

给定一个格式字符串 "%x.yf",它将按照最小宽度 x 和小数点后精度 y 进行格式化。由于小数点之前的数字和小数点本身也计入了最小宽度 (x),因此宽度必须至少比精度大两个单位。特别地,如果打印的数字比最小宽度更宽,则它们将无法与相邻行对齐,因为那些行将变得更短。例如,如果我们尝试用宽度为3、精度为1来打印 10.11.1,则会得到以下结果:

10.1
1.1

然而,如果我们使用宽度为4,1.1将会被填充,因为它不是最小宽度。
10.1
 1.1

现在你可以理解 Ted Hopp 的评论了 :) - Marko Topolnik
我无法让它正常工作,它没有按照我想要的方式填充数字。最后,我使用了两个string.format调用String.format("%%%5s", String.format("%2.2f", number))来获得我期望的格式化效果。 - SnellyBigoda
你可以说一下你使用的数字是多少吗? - joshlf
如果您想要将空格填充到右侧(这不会对齐小数点,但会产生固定宽度的列),有时编写%-x,yf也很有用。 - Rob Hoff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接