在kotlin中将字符串转换为int有一个问题

converting a string to int in kotlin There is a problem

为什么结果是地雷? 我的问题是在 kotlin 中将字符串转换为 int。

class Test{
    val x="200000000"
    val y="11"
}


fun main(){
    val test=Test()
    println(test.x.toInt())
    println(test.y.toInt())
    val z=(Integer.parseInt(test.x))*(Integer.parseInt(test.y))
//or :val z=(test.x.toInt())*(test.y.toInt())
    println(z)

}

结果:

200000000

11

-2094967296

您正在目睹 integer overflow

Int 在 Kotlin 中(如 Java)表示 32 位有符号整数,因此它们的最大值为 2,147,483,647。

您要做的是将 200,000,000 乘以 11,得到 2,200,000,000 - 大于最大值。所以只有该数字的最低有效位可以存储在整数的 32 位中,而你最终会在负数中的某个地方。

如果你想达到这种值,你应该使用 UInt(无符号整数,可以高两倍),Long(64 位,因此可以达到高得多)或其他更复杂的类型,如 BigInteger.

这里有一个 Long 的例子:

val x = "200000000"
val y = "11"
val z = x.toLong() * y.toLong()
println(z) // 2200000000