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