java.lang.Math与kotlin.math兼容吗?

Dil*_*ali 4 java math rounding kotlin java.lang

我正在学习Kotlin并在Math课程中遇到这个问题:

java.lang.Mathkotlin.math不兼容.这对我来说有点尴尬和混乱,因为Kotlin它声称它与100%兼容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)}")
}
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

我看到Java Math正在逐渐达到long价值,而Kotlin则相形见绌kotlin.Double.两种不同语言的Math类的实现是不同的,这不会引起混淆,因为它们都是针对JVM的?

谢谢

use*_*612 5

kotlin.math.round文件说:

将给定值x向最接近的整数舍入,并将关系舍入为偶数整数.

所以152.5与152和153的距离相等,因此它舍入到闭合甚至整数,即152.

另一方面,Java round说:

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

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

  • ......而爪哇的圆形说:"关系正向无穷大." - 所以两个结果都很好并且预期. (2认同)
  • kotlin.math!= java.lang.Math所以kotlin.math.round可能遵循与java.lang.Math.round()不同的规范 - 只是因为它们具有相同的名称,并不意味着它们不能遵循不同的规范. (2认同)
  • 正如@Sebastian所说,API是不同的,因此期望不同的行为是正常的.从理论上讲,你可以创建自己的`math`库,它可以舍入到最接近的奇数,也可以正常,假设它已被正确记录 (2认同)