2013-04-11 63 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代替。