注册 登录
编程论坛 JAVA论坛

java中除数小数点后加一位0和不加0的区别?

mao960929 发布于 2016-01-29 15:43, 3167 次点击
public class HelloWorld {
    public static void main(String[] args) {
        HelloWorld hello = new HelloWorld();
        hello.calcAvg(94, 81);
    }
    public void calcAvg(int score1,int score2){
        double avg=(score1+score2)/2.0;
        System.out.println("平均分:"+avg);
    }
}
在第二段中的double avg=(score1+score2)/2.0为什么后面要加一个零啊,我实验了一下,小数点后面不加0和加0的结果是一样的。
public class HelloWorld{
    public static void main(String[] args) {
        int age1=24;
        int age2=18;
        int age3=36;
        int age4=27;
        int sum=age1+age2+age3+age4;
        double avg=sum/4;
        int minus=age1-age2;
        int newAge=--age1;
        System.out.println("年龄总和:"+sum);
        System.out.println("平均年龄:"+avg);
        System.out.println("年龄差值:"+minus);
        System.out.println("自减后的年龄:"+newAge);

    }
}
这是我之前做过的,中间的double avg=sum/4;如果将4改成4.0之后,结果是小数点后面多了0.25,所以java中作为除数的时候,什么时候需要在小数点后面添加0,什么时候又不需要呢? 谢谢各位大神
3 回复
#2
wp2319572016-01-29 15:58
double avg=sum/4;  按c语法分析  这个sum是int类型 4是int类型  所以 / 的结果为int类型 自动四舍五入了

解决办法是  double avg=1.0*sum/4; 或 double avg=sum/4.0; 或 double avg=1.0*sum/4.0; 或者强制转换
#3
mao9609292016-01-29 16:24
回复 2楼 wp231957
那也就是说前面那个double只有在满足了那些条件之后才有用吗?我刚刚试了一下,发现第一个程序在小数点后面添加了0和不添加也是不一样的,添加了的情况下是87.5,不添加的情况下是87.0,也是因为这个原因吗?谢谢
#4
紫月一殇雪2016-01-30 10:07
/是求商运算,
也就是不管你能不能整除,当运算数是整数类型的时候,商自然就是整数类型,所以很自然的丢失小数部分     5/2=2.5(丢失小数部分也就是2)------5/2=2

但是如果你的运算数(除数、被除数)是double类型的时候,商就是double类型,返回的也就自然而然是小数啦         5/2.0=2.5(因为double类型>int类型,整体式子自动向下转型)5/2.0=2.5

还可以这么理解
5/2=2 余 1  所以商是2
5/2.0=2.5  余  0    所以是2.5
1