在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位小數(shù)(#。###)的精度不感興趣。如何處理這個問題以乘以浮點數(shù)并可靠地進(jìn)行比較?
3 回答

拉莫斯之舞
TA貢獻(xiàn)1820條經(jīng)驗 獲得超10個贊
它是浮點數(shù)不應(yīng)該像進(jìn)行比較的一般規(guī)則(A == B) ,而是喜歡(Math.abs(a-b) < delta)在那里三角洲是一個小數(shù)目。
十進(jìn)制形式的具有固定位數(shù)的浮點值不必具有二進(jìn)制形式的固定位數(shù)。
另外為清楚起見:
雖然嚴(yán)格的==浮點數(shù)的比較具有非常小的實際意義上說,嚴(yán)格的<和>比較,相反,是一個有效的用例(實施例-當(dāng)某些值超過閾值的邏輯觸發(fā):(val > threshold) && panic();)

qq_笑_17
TA貢獻(xiàn)1818條經(jīng)驗 獲得超7個贊
如果您對固定精度數(shù)字感興趣,則應(yīng)使用固定精度類型,例如BigDecimal
,而不是固有的近似(盡管精度高)類型,例如float
。關(guān)于堆棧溢出,有許多類似的問題,涉及許多語言,對此進(jìn)行了更詳細(xì)的介紹。
添加回答
舉報
0/150
提交
取消