5

我在数学课上学习Kotlin并遇到了这个问题:

java.lang.Mathkotlin.math兼容。这对我来说有点尴尬和困惑,因为Kotlin声称它与Java. 也许只有我觉得这很混乱,但我想听听社区的意见,以确认我的感觉是否正确。

问题是数字的四舍五入。请注意以下简单Kotlin代码:

fun main(args: Array<String>) {
val neg = -152.5
val kotlinAbsoluteValue = kotlin.math.abs(neg)
val javaAbsoluteValue = java.lang.Math.abs(neg)
println("Original Variable: $neg")
println("Absolute Value in Java: $javaAbsoluteValue")
println("Absolute Value in Kotlin: $kotlinAbsoluteValue")
println("Rounding kotlinAbsoluteValue in Java: ${java.lang.Math.round(kotlinAbsoluteValue)}")
println("Rounding kotlinAbsoluteValue in Kotlin: ${kotlin.math.round(kotlinAbsoluteValue)}")
println("Rounding javaAbsoluteValue in Java: ${java.lang.Math.round(javaAbsoluteValue)}")
println("Rounding javaAbsoluteValue in Kotlin ${kotlin.math.round(javaAbsoluteValue)}")
}

输出:

Original Variable: -152.5
Absolute Value in Java: 152.5
Absolute Value in Kotlin: 152.5
Rounding kotlinAbsoluteValue in Java: 153
Rounding kotlinAbsoluteValue in Kotlin: 152.0
Rounding javaAbsoluteValue in Java: 153
Rounding javaAbsoluteValue in Kotlin 152.0

我看到 Java Math 向上舍入为longvalue,而 Kotlin 则相反,向下舍入为kotlin.Doublevalue。两种不同语言的 Math 类的实现是不同的,因为它们都针对 JVM,这不会引起混淆吗?

谢谢

4

1 回答 1

5

kotlin.math.round文档说:

将给定值 x 向最接近的整数四舍五入,平局向偶数四舍五入。

所以 152.5 与 152 和 153 等距,因此它被四舍五入到最接近的偶数,即 152。

另一方面,Javaround说:

返回与参数最接近的 long [或 int,取决于提供的参数],并舍入为正无穷大。

查看kotlin.math.round源代码,该函数只是将操作委托给 Java 的Math.rint(x).

于 2018-03-18T12:11:38.300 回答