使用Java时小数位数太多?

Too many decimal places when using Java?

本问题已经有最佳答案,请猛点这里访问。

我目前正试图让我的程序四舍五入到小数点后2位,但似乎无法做到。这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
double ounce;
double grams;
grams = 0.00;
System.out.println("This programme will print a table that can be used to convert ounces to grams, from values 1-15.");
System.out.println("One ounce is equal to 28.35 grams.

Ounces \t\t\t Grams"
);

ounce = 0;
do {
  ounce++;
  grams+=28.35;
  System.out.println((""+ounce+"\t\t\t"+grams+""));
} while (ounce <15);

输出如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Ounces           Grams
1.0                  28.35
2.0                  56.7
3.0                 85.05000000000001
4.0                  113.4
5.0                  141.75
6.0                  170.1
7.0                  198.45
8.0                  226.79999999999998
9.0                 255.14999999999998
10.0                 283.5
11.0                311.85
12.0                340.20000000000005
13.0                368.55000000000007
14.0                 396.9000000000001
15.0            425.2500000000001

最后,"克"下的数字排列不完全正确。有什么办法让他们完美地结合在一起吗?


您可以使用类似以下的另一种输出方法:

1
2
           System.out.format("%f%5f
"
,ounce, gramsFormated);

你可以决定你想要的宽度。在这个例子中,它是5。


如果您希望正确对齐并四舍五入到正确的数字位数,可以使用System.out.format方法,正如mosa建议的那样。

1
System.out.format("%5.2f%20.2f%n", ounce, grams);

注:

  • 格式为您完成了所有对齐,不需要添加选项卡。
  • 在格式字符串中写入换行符的公认方法是%n,而不是
  • 第一部分%5.2f说:在5个字符宽的字段中打印第一个参数,小数点后两位。
  • 第二部分%20.2f对第二个参数做了同样的操作,只是它将字段定义为20个字符宽。这也会创建两列之间的间距。当然,你可以改变宽度。