簡體   English   中英

java.lang.Math與kotlin.math兼容嗎?

[英]Is java.lang.Math compatible with kotlin.math?

我正在學習Kotlin並在Math課程中遇到了這個問題:

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.Doublekotlin.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM