1. 程式人生 > >廖雪峰Java-程式基礎-浮點數運算

廖雪峰Java-程式基礎-浮點數運算

1.浮點數運算的特點

  • 很多浮點數無法精確表示
  • 計算有誤差
  • 整型可以自動提升到浮點型

如0.1用二進位制表示會是一個無限迴圈的小數。計算機不可能在有限記憶體中表示一個無限小數。因此浮點數不能精確表示。也造成計算有誤差。
如果浮點數和整型進行運算,整型會先提升為浮點型,再進行運算,結果為浮點型。

        double d = 1 - 9.0 /10;//0.09999999999999998
        double d1 = 1.2 + 24.0 / 5;//6.0
        double d2 = 1.2 + 24 / 5;//5.2 整數不會自動提升

2.特殊值

  • NaN表示Not a Number
  • Infinity表示無窮大
  • -Infinity表示負無窮大
        double d1 = 0.0 / 0;//NaN
        double d2 = 1.0 / 0;//Infinity
        double d3 = -1.0 / 0;//-Infinity
        System.out.println(d1);
        System.out.println(d2);
        System.out.println(d3);

3.強制轉型

  • 浮點型強制轉為整型會直接扔掉小數位
  • 四捨五入的技巧,+0.5
  • 超出整型範圍自動變為最大值
        int n1 = (int)12.3;//12
        int n2 = (int)12.7;//12
        int n3 = (int)(12.7+0.5);//13
        int n4 = (int)1.2e20;//2147483647
        System.out.println(n1);
        System.out.println(n2);
        System.out.println(n3);
        System.out.println(n4);

4.總結:

  • 浮點數可能無法精確表示
  • 浮點數運算結果可能有誤差
  • 運算結果會自動提升
  • 可以強制轉型,但可能丟失精度