double d = 1/10;html
System.out.println(d);java
返回的結果竟然是0.0!這是怎麼回事兒? spa
第一步:你會發現用運算結果也能夠用int類型接收!3d
沒有報錯,也就是說:htm
在Java語言中,整數之間的除法運算,無論你的小數位有多少位,小數是幾,通通捨棄,只返回整數位數字!blog
第二步:用double類型接收爲何也能夠?rem
由於double類型的取值返回要大於int類型,因此屬於向上類型轉換,固然能夠用比它大的容器接收啦(也就是能夠直接進行轉換 )。get
你用float類型或long類型接收也沒有問題!console
第三步:爲何整數之間的除法運算,只返回整數位?class
由於在Java中,由運算結果,由被運算數的最高數據類型決定,也就是說:整數之間的運算,數據類型都爲int類型,因此,返回的結果也爲int類型。
掌握了這個原理,咱們也就能夠對症下藥了!
若是咱們想要返回完整的運算結果 ,咱們就須要將其中一個的數據類型轉換成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
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
console.log(1/10);//0.1