1

目前,这个数组的输出有一个太大的小数位轨迹。我怎样才能将其限制为小数点后 2 位?我的意思是数组'percentage1'。我在网上看到过方法,但我不明白如何将这些方法实现到代码中,如下所示。

int[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};
int[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};

    double[] percentage1 = new double[correct1.length];
    for(int a = 0; a < correct1.length; a++ ){ 
             percentage1[a] = (((double)correct1[a] / (correct1[a] + incorrect1[a]))*100);
        }

任何帮助将不胜感激。谢谢

4

2 回答 2

3

请尝试添加DecimalFormat对象。

  1. 将此添加到循环的开头,它声明了您要查找的格式 - 2 位小数:DecimalFormat df = new DecimalFormat("#.##");

  2. 使用 对其进行格式化format,然后将其转换回双精度。您需要恢复它的原因是format返回一个字符串。

    percent1[a] = Double.valueOf(df.format((((double)correct1[a] / (correct1[a] + wrong1[a]))*100)));

请参阅下面的修订代码:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};
    int[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};

        double[] percentage1 = new double[correct1.length];
        DecimalFormat df = new DecimalFormat("#.##");
        for(int a = 0; a < correct1.length; a++ ){ 
                 percentage1[a] = Double.valueOf(df.format((((double)correct1[a] / (correct1[a] + incorrect1[a]))*100)));
                 System.out.println(percentage1[a]);
            }

}

样本结果:

90.91
95.24
72.22
88.24
91.67
78.26
70.37
95.45
100.0
100.0
于 2013-04-24T01:04:01.787 回答
1

你不能。双打没有小数位。他们有二进制的地方。如果您想要小数位,则必须使用小数基数,即由DecimalFormatBigDecimal.

证明在这里

于 2013-04-24T01:32:38.007 回答