1

在scala中试试这个:

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

4

2 回答 2

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
于 2013-04-11T12:24:55.363 回答
1

Afloat有大约7 位有效的十进制数字。因此,鉴于您的结果取决于保留变量val value1 = -1.3323651E7f的所有数字,因此您会遇到麻烦并不奇怪。我会double改用。

于 2013-04-11T14:46:44.077 回答