0
在IRB:兩個非常接近的浮點數不相等
0.9999999999999998 == 1.0
# => false
0.99999999999999998 == 1.0
# => true
也正好顯示inspect
值:
0.9999999999999998
# => 0.9999999999999998
0.99999999999999998
# => 1.0
在我的情況下,通過我的節目所創造的價值是不幸的是,第一個,所以我無法編寫一個將值驗證爲等於1的測試用例。
我下列選項之間作出決定:
- 在應用程序代碼中添加
round
電話,但是應用程序已經在工作,我只是我無法測試 - 在測試代碼 添加
- ???
round
電話
你會推薦什麼方法?有沒有一種方法可以將我的程序配置爲在十進制後用十五個九進行0處理,等於1.0?這感覺有點令人沮喪,因爲小數點後十六個九點似乎是切斷 - 我只是一個短。
您已經證明IRB將十進制浮點值解釋爲具有固定精度的類型Float,而不是類型爲具有任意精度的BigDecimal。這對你的程序做了什麼或者應該做什麼,或者說你的測試做了什麼或者應該做什麼都沒有提及。 –
請注意,執行浮點數的精確(in)等同比較很少適合。使用任意精度數字並不會真的改變這一點。如果你想要具體的建議,那麼你需要明確說明你想要測試的謂詞是什麼。 –
@JohnBollinger我想知道是否有一種方法,我可以配置浮點以'0.9999999999999998 == 1.0'的方式。就像我說的那樣,這個值(15個9)與我需要的精度(16個9)相比只有一個。我已經開始查看[Float](https://ruby-doc.org/core-2.2.3/Float.html)類中的常量 - 我嘗試更改'EPSILON'和'DIG',但它沒有沒有效果。 –