【问题标题】:Align decimals in a list of doubles in Java在Java中的双精度列表中对齐小数
【发布时间】:2012-07-13 10:32:55
【问题描述】:

这是代码部分:

    System.out.println("The values of pi from term " + (userNum - 9) + " to term " + userNum + " are:");        
        for (int x = 1; x < userNum; x++) 
            {
                if (x % 2 == 1)
                    sum = sum + (4.0/(2 * x - 1));
                else
                    sum = sum - (4.0/(2 * x - 1));
            System.out.println("Term " + (x) + ": " + sum);
            }

这是输出:

The values of pi from term 2 to term 11 are:
Term 1: 4.0
Term 2: 2.666666666666667
Term 3: 3.466666666666667
Term 4: 2.8952380952380956
Term 5: 3.3396825396825403
Term 6: 2.9760461760461765
Term 7: 3.2837384837384844
Term 8: 3.017071817071818
Term 9: 3.2523659347188767
Term 10: 3.0418396189294032

第 10 学期的小数点需要与其他小数点对齐。在 Java 中如何做到这一点?谢谢。

【问题讨论】:

  • 使用System.out.printf(...)String.format(....)。 API 将向您展示这些是如何使用的。
  • 我试过 printf;除非与实际值一起使用,否则它似乎效果不佳。有没有办法用变量(在本例中为“sum”)执行 printf?我还没有尝试过 String.format;我在 API 中读到了它,但我最近才开始编程并且对 Java 非常陌生——我真的不明白如何将它应用到我的特定代码中。谢谢杰弗里和气垫船。
  • "I have tried printf; it doesn't seem to work well unless it's used with an actual value.":我不明白你在这里的说法。这最好的解决方案。如果您已经尝试过,那么您应该向我们展示您是如何尝试的以及您的输出是什么。 String.format 与 printf 的工作方式相同,只是它返回一个可以稍后打印的字符串。
  • @LuiggiMendoza 这是一个答案。
  • @CaptainGiraffe 我想了一分钟并将其转换为答案。谢谢!

标签: java alignment double decimal


【解决方案1】:

System.out.printf 类似于(但不是)C printf 方法。你可以用它来做类似的事情:

int spaces = (int)Math.log10(Math.abs(userNum)) + 1;
String myFormat = "Term %" + spaces +"d: %.10f\n";

//inside the for loop
System.out.printf(myFormat , x, sum);

已编辑:您可以使用 %2d 让数字使用 2 个空格,如果数字更大,则会使用更多空格。

更多信息:

【讨论】:

  • @Luigi,我正在为该程序进行调整。感谢您指路。
  • 别担心,这就是答案的目的,解决真正的问题或作为解决问题的基础。
  • @user1519533 我已经根据后面的空格再次编辑了我的答案(仅在您需要这样的情况下)。
  • 我知道我拼错了你的名字...感谢您的更新。我已经玩了一点,它工作正常。
【解决方案2】:

如果你使用Apache commons lang,你可以使用StringUtils类来完成你需要的:

System.out.println("Term " + 
    StringUtils.leftPad("" + x, (userNum.length() - x.length()), ' ')
      + ": " + sum);

【讨论】:

    【解决方案3】:

    根据x的位数,您似乎想在Term之后添加空格:

        int j = String.valueOf(x).length();
        String sp = "";
        while( j++ < String.valueOf(userNum).length() )
            sp += " ";
        System.out.printf("Term %s %d : %.15f\n", sp, x, sum);
    

    【讨论】:

    • 在看到您使用 sp trick 的答案后,我编辑了我的。在评论/帖子中使用printf 之前,您应该学会使用它。
    • 另外,您知道吗,您可以使用(int)Math.log10(Math.abs(longVar)) + 1; 获取数字中的位数(在长数字范围内)(甚至比将数字转换为字符串还要快)。
    • 谢谢JR。我会玩的。
    • OP,如前所述,正确使用 printf%2d 或 %3d 如果 userNum &gt; 100
    • 好的,基于此编辑的答案,我没有注意这个事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 2011-01-23
    • 2011-07-07
    相关资源
    最近更新 更多