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

1.情景展現

  double d = 1/10;html

  System.out.println(d);java

  返回的結果竟然是0.0!這是怎麼回事兒? spa

2.緣由分析

  第一步:你會發現用運算結果也能夠用int類型接收!3d

  沒有報錯,也就是說:htm

  在Java語言中,整數之間的除法運算,無論你的小數位有多少位,小數是幾,通通捨棄,只返回整數位數字!blog

  第二步:用double類型接收爲何也能夠?rem

  由於double類型的取值返回要大於int類型,因此屬於向上類型轉換,固然能夠用比它大的容器接收啦(也就是能夠直接進行轉換 )。get

  你用float類型或long類型接收也沒有問題!console

  第三步:爲何整數之間的除法運算,只返回整數位?class

  由於在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

 

寫在最後

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

 相關推薦:

相關文章
相關標籤/搜索