gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:54 27 4
gpt4 key购买 nike

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

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

问题是数字的四舍五入。请观察以下简单的 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 正在四舍五入到 long 值,而 Kotlin 相反四舍五入到 kotlin.Double 值。两种不同语言的 Math 类的实现是不同的,这不会引起混淆吗,因为它们都针对 JVM?

谢谢

最佳答案

kotlin.math.round的文档说:

Rounds the given value x towards the closest integer with ties rounded towards even integer.

因此 152.5 与 152 和 153 的距离相等,因此它四舍五入为收尾偶数,即 152。

另一方面,Java 的 round说:

Returns the closest long [or int, depending on the supplied argument] to the argument, with ties rounding to positive infinity.

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

关于math - java.lang.Math 与 kotlin.math 兼容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49347692/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com