为什么int转换成double会失去精度?

import java.util.Scanner;
public class ScoreStat {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
System.out.println("STB的成绩是:"); //STB的成绩是:89
int stb = input.nextInt();
System.out.println("Java的成绩是:"); //Java的成绩是:90
int java = input.nextInt();
System.out.println("SQL的成绩是:"); //SQL的成绩是:60
int sql = input.nextInt();
int diffen;
double avg;
System.out.println("----------------------");
System.out.println("STB\tJava\tSQL");
System.out.println(stb + "\t" + java + "\t" + sql );
System.out.println("----------------------");
diffen = java -sql;
avg = (stb + java + sql) / 3;
System.out.println("Java和SQL的成绩差是:"+diffen);
System.out.println("3门课的平均分是:"+avg);
}

}
当这个程序运行后,avg显示出来的是79.0, 而实际的应该是79.6666667。请问这是为什么?

第1个回答  2015-04-18
java 是否 同 c 一样,整型除以整型得整型?
avg = (stb + java + sql) / 3.0; --- 用 3.0, 不用 3 。追问

试过,结果还是一样

追答

那么加上 (double) 强制转换。
avg = ( (double) stb + (double) java + (double) sql) / 3.0;

本回答被网友采纳