2013-04-11 77 views
1

在斯卡拉試試這個:階數學圓誤差

val value1 = -1.3323651E7f 
val value2 = Math.round(value1) 
val value3 = value1.toInt 
val value4 = Math.round(value3) 

value1: Float = -1.3323651E7 
value2: Int = -13323650 
value3: Int = -13323651 
value4: Int = -13323650 

爲什麼value2value4不同value1value3

回答

2

實測值的java.lang.Math模塊中的答案:

Math.round(a) = (int)Math.floor(a+0.5f) 

此外,計算與浮點變量:

-1.3323651E7 + 0.5f = -1.3323650E7 

因爲0.5F首先四捨五入至1f以適應區別。 這裏是我以前的問題的部分解決方案:

val value2 = Math.floor(value1 + 0.499f).toInt 
value2: Int = -13323651 
1

一個float有大約7 significant decimal digits。 所以,鑑於你的結果取決於保留變量val value1 = -1.3323651E7f的所有數字,你會遇到麻煩並不奇怪。我會用double代替。