在Java中,浮點運算沒有精確表示。例如下面的java代碼:float a = 1.2; float b= 3.0;float c = a * b; if(c == 3.6){ System.out.println("c is 3.6");} else { System.out.println("c is not 3.6");} 打印“ c不是3.6”。我對超過3位小數(#。###)的精度不感興趣。如何處理這個問題以乘以浮點數并可靠地進行比較?
3 回答
拉莫斯之舞
TA貢獻1820條經驗 獲得超10個贊
它是浮點數不應該像進行比較的一般規則(A == B) ,而是喜歡(Math.abs(a-b) < delta)在那里三角洲是一個小數目。
十進制形式的具有固定位數的浮點值不必具有二進制形式的固定位數。
另外為清楚起見:
雖然嚴格的==浮點數的比較具有非常小的實際意義上說,嚴格的<和>比較,相反,是一個有效的用例(實施例-當某些值超過閾值的邏輯觸發:(val > threshold) && panic();)
qq_笑_17
TA貢獻1818條經驗 獲得超7個贊
如果您對固定精度數字感興趣,則應使用固定精度類型,例如BigDecimal,而不是固有的近似(盡管精度高)類型,例如float。關于堆棧溢出,有許多類似的問題,涉及許多語言,對此進行了更詳細的介紹。
添加回答
舉報
0/150
提交
取消
