1.情景展示
double d = 1/10;
System.out.println(d);
返回的結果居然是0.0!這是怎么回事兒?
2.原因分析
第一步:你會發現用運算結果也可以用int類型接收!
沒有報錯,也就是說:
在Java語言中,整數之間的除法運算,不管你的小數位有多少位,小數是幾,統統舍棄,只返回整數位數字!
第二步:用double類型接收為什么也可以?
因為double類型的取值返回要大於int類型,所以屬於向上類型轉換,當然可以用比它大的容器接收啦(也就是可以直接進行轉換 )。
你用float類型或long類型接收也沒有問題!
第三步:為什么整數之間的除法運算,只返回整數位?
因為在Java中,由運算結果,由被運算數的最高數據類型決定,也就是說:整數之間的運算,數據類型都為int類型,所以,返回的結果也為int類型。
3.解決方案
掌握了這個原理,我們也就可以對症下葯了!
如果我們想要返回完整的運算結果 ,我們就需要將其中一個的數據類型轉換成double類型或者float類型,而不是只改變接收運算結果的數據類型!
方式一:將被除數轉換成double類型
double d4 = 100d/235886; System.out.println(d4);//4.2393359504167265E-4
方式二:將除數轉換成double類型
double d5 = 100/235886d; System.out.println(d5);//4.2393359504167265E-4
方式三:將被除數轉換成float類型
float f4 = 2358861f/235886; System.out.println(f4);//10.000004
方式四:將除數轉換成float類型
float f5 = 2358861/235886f; System.out.println(f5);//10.000004
連續運算
// 連續運算也是如此 int i4 = 1234567/1000/3600; System.out.println(i4);//0 double d = 1234567d/1000/3600; System.out.println(d);//0.34293527777777777
轉換成long類型沒用哦!
long l = 100L/235886; System.out.println(l);// 0
兩個Long類型的數值進行除法運算
System.out.println("long類型除法運算:" + 12345678910L/98765432110L);//0 System.out.println("上升為double類型運算:" + 12345678910L/98765432110D);//0.12499999894953125 System.out.println("上升為float類型運算:" + 12345678910L/98765432110F);//0.125
4.擴展
Java除法運算向上取整。
方式一:向上類型轉換+Math.ceil()
// 方式一:向上類型轉換 double d = 100D/235886; // 向上取整 int ceil2 = (int)Math.ceil(d); System.out.println(ceil2);// 1
方式二:整數位+(有余數整數+1)
// 只保留整數位 int floor = 100/235886; // 余數 int remainder = 100%235886; // 向上取整 int ceil = floor + (remainder > 0 ? 1 : 0); System.out.println("只保留整數位:" + floor + "," + (remainder > 0 ? "余數大於0" : "余數為0") + ",向上取整:" + ceil);// 只保留整數位:0,余數大於0,向上取整:1
5.js的整數間的運算,會返回實際運算結果哦!
console.log(1/10);//0.1