舍入误差给出了无效的答案

时间:2013-05-09 20:48:16

标签: java rounding

我遇到了四舍五入的问题。出于某种原因,我无法将testP舍入到第十位。例如,在第一个给定的例子(Alex Smith)上,它给出了82.0的答案,但它应该是82.6。

以下是包含示例的作业:http://www.hpcodewars.org/past/cw5/problems/Average.htm

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.math.*;
import java.util.Scanner;


public class Average {
        public static void main(String[] args) {
                int num = 0, temp =0;;
                String fileName="AverageInput.txt";
                String fileName2="AverageOutput.txt";
                Scanner inputStream = null;
                PrintWriter outputStream = null;
                double homeworkP = 0;

                //read
                try{
                        inputStream = new Scanner(new File(fileName)); //try to open the file
                }
                catch(Exception e){
                        System.out.println("Could not open the file named "+ fileName); // if it doesn't find it, tell them
                        System.exit(0);  // and then exit.
                }
                //write
                try{
                        outputStream = new PrintWriter(new FileOutputStream(fileName2,true)); //try to create the file
                }
                catch(Exception e){
                        System.out.println("Could not open the file named "+ fileName2); // if it doesn't find it, tell them
                        System.exit(0);  // and then exit.
                }


                int numH = inputStream.nextInt();
                int numT = inputStream.nextInt();
                int[] arrayH = new int[numH];
                outputStream.println("Averages");
                String blank = inputStream.nextLine();
                while (inputStream.hasNextLine()){
                        String line = inputStream.nextLine().replaceAll(" H","").replaceAll(" T","");
                        String[] nameParts = line.split(" ");
                        String name = nameParts[0] +" "+ nameParts[1];
                                        for (int i =0, p=2; i < numH; i++, p++){     //collects homework grades.
                                                arrayH[i] = Integer.valueOf(nameParts[p]);
                                                temp = temp + arrayH[i];
                                        }
                                        homeworkP = (temp - arrayMin(arrayH))/(numH-1) ; //gets percentage as rounded decimal.
                                        //System.out.println("homeP: " + homeworkP);
                                        temp =0;
                                        num = 0;
                                        for (int p = numH; p < numT + numH; p++){      //collects test grades.
                                                        num = num + Integer.valueOf(nameParts[p]);
                                        }
                                        double testP =num/numT; //gets percentage as decimal.
                                        System.out.println("homep: "+ homeworkP + "TestP: "+ testP);
                                        double TotalP = (homeworkP * 40) + (testP * 60);
                                        System.out.println(name + " " + TotalP);
                }
                        outputStream.close();
                        inputStream.close();
        }


        public static int arrayMin(int[] arr) {
            int i = 0;
            int min = Integer.MAX_VALUE;
            if (arr == null) {
                return 0;
            } else {
                while (i < arr.length) {
                    if (arr[i] < min) {
                      min = arr[i];
                    }
                    i++;
                }
            }
            return min;
        }
}

1 个答案:

答案 0 :(得分:5)

更改

double testP =num/numT;

double testP = ((double) num) / numT;

由于numnumTint,您目前有一个整数除法,它将是0而不是0.xyz ...