int i = 3;
int j = 2 ;
float ss = i/j;
double avg = (2/(2+1.33))*ss + (1.33/(2+1.33))*1.0050313201749201;
double avg1= (2/(2+1.33))*i/j + (1.33/(2+1.33))*1.0050313201749201;
System.out.println((ss) +" ss");
System.out.println(avg);
System.out.println((i/j) +" i/j");
System.out.println(avg1);
打印结果 :
1.0 ss
1.0020095062560492
1 i/j
1.3023098065563494
为什么 avg 跟avg1的数会差0.3?
int j = 2 ;
float ss = i/j;
double avg = (2/(2+1.33))*ss + (1.33/(2+1.33))*1.0050313201749201;
double avg1= (2/(2+1.33))*i/j + (1.33/(2+1.33))*1.0050313201749201;
System.out.println((ss) +" ss");
System.out.println(avg);
System.out.println((i/j) +" i/j");
System.out.println(avg1);
打印结果 :
1.0 ss
1.0020095062560492
1 i/j
1.3023098065563494
为什么 avg 跟avg1的数会差0.3?
(2/(2+1.33))*ss
(2/(2+1.33))*i/j
你觉得这一样么?
第一个是a*(i/j)
第二个是(a*i)/j
第二,你第二个算式是i/j是int型数据的运算,结果还是int型所以结果不一样啊!
加入都是int类型的话运算顺序不同结果也不同
比如i=2;j=3;k=2
int a=i*j/k;
int b=i*(j/k); 这两个一样吗?
int i = 3;
int j = 2 ;
float a = i / j;//1.5
int b = i / j;//1上述两者相差1/2,再乘上(2/(2+1.33)),最后相差0.3
加入都是int类型的话运算顺序不同结果也不同
比如i=2;j=3;k=2
int a=i*j/k;
int b=i*(j/k); 这两个一样吗?你把j改成4就一样了
加入都是int类型的话运算顺序不同结果也不同
比如i=2;j=3;k=2
int a=i*j/k;
int b=i*(j/k); 这两个一样吗?你把j改成4就一样了我只是想表达“然后有个东西叫乘法结合律,先算谁都一样。”是不对的
float ss = i/j; 此处i j类型为整形。
(2/(2+1.33))*i/j 此处i j类型为double型
加入都是int类型的话运算顺序不同结果也不同
比如i=2;j=3;k=2
int a=i*j/k;
int b=i*(j/k); 这两个一样吗?你把j改成4就一样了我只是想表达“然后有个东西叫乘法结合律,先算谁都一样。”是不对的
我说了乘法结合律的前提是在纸上而不是在计算机里计算
这个是直接乘以ss,即乘以i/j的结果
double avg1= (2/(2+1.33))*i/j + (1.33/(2+1.33))*1.0050313201749201;
而这里是先乘以i然后再除以j
这个才是正解,就是截取的问题!