11

如果我有以下小数点数字:

Double[] numbers = new Double[] {1.1233, 12.4231414, 0.123, 123.3444, 1.1};
for (Double number : numbers) {
    System.out.println(String.format("%4.3f", number));
}

然后我得到以下输出:

1.123
12.423
0.123
123.344
1.100

我想要的是:

   1.123
  12.423
   0.123
 123.344
   1.100
4

3 回答 3

12

可能有点令人困惑的部分是String.format("4.3", number)

4代表整个数字的长度(包括小数),而不仅仅是小数之前的部分。3代表小数位数。

因此,要使格式正确,小数点前最多 4 个数字和小数点后 3 个数字,实际上需要的格式是String.format("%8.3f", number).

于 2013-06-05T17:55:31.447 回答
2

您可以编写一个在数字前打印空格的函数。

如果它们都是4.3f,我们可以假设每个数字最多占用 8 个字符,所以我们可以这样做:

public static String printDouble(Double number)
{
  String numberString = String.format("%4.3f", number);
  int empty = 8 - numberString.length();
  String emptyString = new String(new char[empty]).replace('\0', ' ');

  return (emptyString + numberString);
}

输入:

public static void main(String[] args)
{
    System.out.println(printDouble(1.123));
    System.out.println(printDouble(12.423));
    System.out.println(printDouble(0.123));
    System.out.println(printDouble(123.344));
    System.out.println(printDouble(1.100));
}

输出:

run:
   1,123
  12,423
   0,123
 123,344
   1,100
BUILD SUCCESSFUL (total time: 0 seconds)
于 2013-06-05T18:06:48.860 回答
2

这是另一个简单的方法,user System.out.printf();

Double[] numbers = new Double[]{1.1233, 12.4231414, 0.123, 123.3444, 1.1};

for (Double number : numbers) {
  System.out.printf("%7.3f\n", number);
}
于 2013-06-05T18:14:44.890 回答