2022-03-12

【Kotlin】奇妙的數字運算 Float, BigDecimal

最近遇到個題目,要進行數字運算,運算過程中會產生小數,如下:

2222 ÷ 80 後,扣除整數,只留下小數,再將小數 × 80

既然會產生小數,直覺就是將數字轉成 Float 運算,但算出來的結果卻不如預期
  1.  
  2. var ii = 2222
  3.  
  4. // 個別運算都正確
  5. var i2 = (ii.toFloat()/80) // 結果為 27.775
  6. var i3 = ii/80 // 結果為 27
  7.  
  8. // 但擺在一起運算就出問題了
  9. i4 = (ii.toFloat()/80) - (ii/80) // 結果為 0.7749996, 而不是 0.775
  10.  
  11. // 做了各種嘗試後, toBigDecimal() 會維持數字的精度, 而不會產生預期外的結果
  12. var i5 = (((ii.toFloat()/80).toBigDecimal() - (ii/80).toBigDecimal())*(80).toBigDecimal()) // 結果為 62.000
  13. // 但我只要整數, 所以
  14. var i5 = (((ii.toFloat()/80).toBigDecimal() - (ii/80).toBigDecimal())*(80).toBigDecimal()).toInt()
  15.  

沒有留言:

張貼留言