最近作了一個需求,用到了 預算 / 時間窗口數,其中預算是double類型,時間窗口數是int類型,其中時間窗口數我計算的有問題,會出現爲0的狀況(實際最小值應該爲1),而後就出現了 一個double類型的數除以0的狀況,分母爲0,是否是要報 java.lang.ArithmeticException: / by zero?(不蠻你們,我最初也是這樣認爲的,但這個異常是針對整數的,浮點數運算引入了無限的概念)java
結果沒有拋出異常,而是返回了 Infinitycode
@Test public void test() { double price = 100d; int num = 0; System.out.println(price / num); // 輸出結果爲 Infinity }
浮點數引入無限的概念來處理這種分母爲0的狀況,Infinity主要是爲了解決除數爲0的狀況,上面的例子是正的Infinity,其實還有負的Infinity,以下例子所示blog
@Test public void test() { double price = 100d; int num = 0; System.out.println(- price / num); // 輸出結果爲 -Infinity }
咱們看下double中對Infinity和-Infinity的解釋 it
浮點數除了有Infinity,還有NaN,用來表示 0 / 0io
@Test public void test() { int num = 0; System.out.println(0d / num); // 輸出結果爲 NaN }
咱們看下double中對NaN的解釋 class
1.浮點數在運算時,若是遇到分母爲0的狀況,會用一個表明無限的Infinity來表示,而遇到分子和分母都爲0的狀況,用NaN來表示。test
2.異常java.lang.ArithmeticException: / by zero 是針對整數的擴展
3.並非全部的分母爲0都會拋異常file
以上一樣適用於floatfloat