我遇到了四舍五入的问题。出于某种原因,我无法将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;
}
}
答案 0 :(得分:5)
更改
double testP =num/numT;
到
double testP = ((double) num) / numT;
由于num
和numT
为int
,您目前有一个整数除法,它将是0
而不是0.xyz
...