Java 整數間的除法運算如何保留所有小數位?


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

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM