【问题标题】:Fixed-width floating point number format定宽浮点数格式
【发布时间】:2013-07-10 18:37:09
【问题描述】:

在 Java 中,我有以下代码:

System.out.printf("%05.5f", myFloat);

这适用于任何小于 10 的数字,但对于任何 10 或更大的数字,小数位会被修剪为 5,但这并不能弥补小数点前的数字更长的事实。我想做以下其中一项:

12.3456
1.23456

(即相同的位数),或:

12.34567
 2.34567

(即,用空格填充,以便小数点和最后一个数字对齐)。

如果我可以让其中任何一个工作,我会很高兴(两者都会更好!)。

有什么想法吗?谢谢!

【问题讨论】:

  • 你知道你需要的最大宽度吗?如果是这样,只需将其用作宽度而不是 5。
  • 你的意思是像“%05f”?如果是这样,那是行不通的。我得到:29.979748,然后是 7.449038(小数点后的位数相同,但没有前导空格或 0)。
  • 我的意思是“%08.5f”行——让它变宽
  • 是的,我最终想通了。请参阅@marko-topolnik 对我的回答的评论。

标签: java floating-point string-formatting fixed-width


【解决方案1】:

我想出了如何去做:

12.34567
 2.34567

给定一个像"%x.yf" 这样的格式字符串,它将以最小 宽度x 和小数点后精度y 进行格式化。由于前小数点数字和小数点本身计入最小宽度 (x),因此宽度必须至少比精度大两倍。特别是,如果打印的数字比最小宽度宽,它不会与相邻的行很好地对齐,因为这些行会更短。例如,如果我们尝试打印10.1,然后打印1.1,宽度为3,精度为1,我们将得到:

10.1
1.1

但是,如果我们使用 4 的宽度,1.1 将被填充,因为它不是最小宽度:

10.1
 1.1

【讨论】:

  • ...现在你可以理解 Ted Hopp 的评论了 :)
  • 我无法让它工作,只是没有按照我想要的方式填充数字。我最终使用了两个 string.format 调用 String.format("%%%5s", String.format("%2.2f", number)) 来获得我期望的格式。
  • 你能说一下你用的是什么号码吗?
  • 如果你想让空格向右填充,有时也可以写 %-x,yf (这不会对齐小数点,但会产生固定宽度的列)跨度>
猜你喜欢
  • 2010-12-16
  • 2012-02-11
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多