[英]Is java.lang.Math compatible with kotlin.math?
我正在學習Kotlin
並在Math課程中遇到了這個問題:
java.lang.Math
和kotlin.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
到kotlin.Double
值。 兩種不同語言的Math類的實現是不同的,這不會引起混淆,因為它們都是針對JVM的?
謝謝
kotlin.math.round
的文檔說:
將給定值x向最接近的整數舍入,並將關系舍入為偶數整數。
所以152.5與152和153的距離相等,因此它舍入到閉合甚至整數,即152。
另一方面,Java的round
說:
返回與參數最接近的long [或int,具體取決於提供的參數],並將關系舍入為正無窮大。
查看kotlin.math.round
源代碼 ,該函數只是將操作委托給Java的Math.rint(x)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.