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)

result :

200000000

-2094967296

android
kotlin
types
reza.fathi921
reza.fathi921
发布于 2022-02-12
1 个回答
Joffrey
Joffrey
发布于 2022-02-12
已采纳
0 人赞同

你正在见证一个 integer overflow .

Int 在Kotlin中(和Java一样)代表32位有符号的整数,所以它们的最大值是2,147,483,647。

你要做的是用200,000,000乘以11,这将产生2,200,000,000 - 超过最大值。所以只有这个数字的最小有效位可以存储在整数的32位中,而你最终会在负数的某个地方。

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

这里有一个 Long 的例子。