Java的加減乘除運算


作為Java初學者,在學習了基本數據類型之后,大哥給我布置了作業,內容如下:

  計算題:假如今天逛超市花了99.99 請用加減乘除,進行計算得到99.99這個結果。
  要求:1,4個方法;

        2,數值隨意編寫;

        3,數值要用到int、long、float、double四種類型;

     4,都是返回值,實例化后打印。

  一開始,我建了4個類,按照加減乘除的拼音分別命名為jia、jian、cheng、chu,代碼如下所示。

 1 public class jia {  //加法
 2         int a = 10;
 3         long b = 35;
 4         float c = 36.95f;
 5         double d = 18.04;
 6           public void jiafa() {        
 7                 double jia =a + b + c + d;
 8                 System.out.println("加法運算結果是:" + jia);
 9           }
10 }
 1 public class jian {  //減
 2         long a = 300;
 3         int b = 18;
 4         float c = 128.7f;
 5         double d = 53.31;
 6             public void jianfa() {
 7                 float jian = (float)(a - b - c - (double)d);
 8                 System.out.println("減法運算結果是:" + jian);
 9             }
10 }
1 public class cheng { //乘法  2 int a = 1;  3 long b = 1000000;  4 float c = 0.000001f;  5 double d = 99.99;  6 public void chengfa() {  7 double cheng = a * b * c * d;  8 System.out.println("乘法運算結果是:" + cheng);  9       } 10 }
 1 public class chu {    //除法
 2     int a = 1000;
 3     long b = 1000000;
 4     float c = 0.001f;
 5     double d = 99.99;
 6             public void chufa() {
 7               float chu = (float)((double)d/(a/b/c));
 8               System.out.println("除法運算結果是:" + chu);    
 9             }
10 }

然后,新建一個類,命名為yunsuan,將上述四則運算實例化並輸出結果,代碼如下:

 1 public class yunsuan {
 2     public static void main(String[] args) {
 3         jia jiafa = new jia();           //實例化加法
 4         jian jianfa = new jian();        //實例化減法
 5         cheng chengfa = new cheng();     //實例化乘法
 6         chu chufa = new chu();           //實例化除法
 7          
 8         jiafa.jiafa();   //調用加法方法
 9         jianfa.jianfa();
10         chengfa.chengfa();
11         chufa.chufa();
12     }
13 }

運行結果如下圖:

  除了乘法之外,其他的運算都沒有得到我想要的99.99這個結果,這是為什么呢?

  經過講解和查閱資料之后,原來浮點數是不適合精確計算的,原因是計算機里面數的計算都是二進制計算的,我們其實輸入的十進制數,有些十進制數轉換成二進制是可以精確轉換,而有些轉換則不是精確轉換,得到的是一個最靠近它的數,所以這里面就存在一個誤差。另外,如果浮點數不進行計算時,在十進制里面浮點數能正確顯示,如果浮點數參與了計算,那么浮點數二進制與十進制間的轉換過程就會變得不可而知,變得不可逆。

  那么要想使得到的結果精確,可以使用Java DecimalFormat 類,用於格式化十進制數字。

  用法: 

import java.text.DecimalFormat;

double pi = 3.1415926; DecimalFormat form
= new DecimalFormat("#.00"); // #.00 表示兩位小數 #.0000四位小數 以此類推

  也可以使用Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。

  用法:

import java.math.BigDecimal;

double a = 3.1516;
BigDecimal b = new BigDecimal(Double.toString(a));

  以加法為例,我們可以用BigDecimal求值,代碼示例如下:

1 import java.math.BigDecimal;
2 
3 BigDecimal b1 = new BigDecimal(Double.toString(a));
4 BigDecimal b2 = new BigDecimal(Double.toString(b));
5 BigDecimal b3 = new BigDecimal(Double.toString(c));
6 BigDecimal b4 = new BigDecimal(Double.toString(d));
7 
8 double a= b1.add(b2).add(b3).add(b4).doubleValue();

  這里還要注意的是,除法得到的結果是Infinity,這是因為整型和整型相除,得到的仍然是整型;a = 100,b = 1000,a/b 應該等於0.001,實際上得到的是0.0,由於0不能做除數,因此得到的值是無效的,因此就需要Java數值之間的強制轉換強制轉換是將需要轉換的數值轉換為需要的類型。

1 float chu = (float)((double)d4/(a4/b4/c4));           //錯誤寫法
2 float chu = (float)((double)d4/((float)a4/(float)b4/c4)); //正確寫法 

  經過深入理解,將以上代碼整合到一個yunsuan的文件里,代碼如下:

 1 import java.text.DecimalFormat;
 2 
 3 public class yunsuan {
 4     public void jiafa(){
 5         int a1 = 10;
 6         long b1 = 35;
 7         float c1 = 36.95f;
 8         double d1 = 18.04;
 9         
10         DecimalFormat form = new DecimalFormat("#.00");//保留兩位小數
11         double jia =a1 + b1 + c1 + d1;
12         System.out.println("加法運算結果是:" + form.format(jia));
13     }
14     public void jianfa(){
15         long a2 = 300;
16         int b2 = 18;
17         float c2 = 128.7f;
18         double d2 = 53.31;
19         
20         DecimalFormat form = new DecimalFormat("#.00");//保留兩位小數
21         float jian = (float)(a2 - b2 - c2 - (double)d2);
22         System.out.println("減法運算結果是:" + form.format(jian));
23     }
24     public void chengfa() {
25         int a3 = 1;
26         long b3 = 1000000;
27         float c3 = 0.000001f;
28         double d3 = 99.99;
29         
30         double cheng = a3 * b3 * c3 * d3;
31         System.out.println("乘法運算結果是:" + cheng);
32     }
33     public void chufa() {
34         int a4 = 1000;
35         long b4 = 1000000;
36         float c4 = 0.001f;
37         double d4 = 99.99;
38 
39         float chu = (float)((double)d4/((float)a4/(float)b4/c4));
40         System.out.println("除法運算結果是:" + chu);
41     }
42     
43     public static void main(String[] args) {
44         yunsuan jiafa = new yunsuan();    //實例化
45         yunsuan jianfa = new yunsuan();
46         yunsuan chengfa = new yunsuan();
47         yunsuan chufa = new yunsuan();
48         
49         jiafa.jiafa();
50         jianfa.jianfa();
51         chengfa.chengfa();
52         chufa.chufa();
53     }
54 }

  親測全部為99.99,結果正確。


免責聲明!

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



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