String 到 Int 抛出 NumberFormatException

问题描述 投票:0回答:2

我想将 String 转换为 Int。

所讨论的字符串是

1585489022235

我必须首先转换为字符串,这似乎是成功的(我正在打印上面的内容)。

val id = data.get("id").toString()

println(id)

val toInt = id.toInt()

当我尝试从 String 转换为 Int 时,抛出此异常:

 Error Message: java.lang.NumberFormatException: For input string: "1585489022235"
        Stacktrace: 
        java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
        java.base/java.lang.Integer.parseInt(Integer.java:658)
        java.base/java.lang.Integer.parseInt(Integer.java:776)

提前非常感谢

kotlin numberformatexception
2个回答
4
投票

"1585489022235"
无法转换为
Int
,因为它大于通过
Int
获取的数据类型
Int.MAX_VALUE
的最大值,并且等于
2147483647

您可以做的是将字符串隐藏为
Long
:

val x = id.toLong()

long数据类型的最大值为

9223372036854775807
,可以通过
Long.MAX_VALUE
获取。
您可以在这里找到更多信息:基本类型 - 数字


0
投票

在 Kotlin 中,

Int
Long
都是数值数据类型,但它们代表不同的值范围。
Int
Long
之间的主要区别在于它们的大小和它们可以存储的值的范围:

尺寸:

Int
:32 位(4 字节)

Long
:64 位(8 字节)

取值范围:

Int
:范围从 -2^31 到 2^31 - 1

Long
:范围从 -2^63 到 2^63 - 1

Int
Long
之间的选择取决于您应用的具体要求。以下是一些注意事项:

  • 内存使用情况:

    Long
    使用的内存是
    Int
    的两倍,因为与32位相比,它是64位。如果您有大量整数并且需要考虑内存使用情况,那么使用
    Int
    可能会更有效。

  • 值范围:如果您的应用程序需要表示大于

    Int
    范围的值(例如时间戳、唯一标识符等),则应使用
    Long
    以避免潜在的溢出问题。

  • 性能:

    Int
    上的操作可能比
    Long
    上更快,因为它们涉及较小的数据大小。然而,现代处理器针对这两种数据类型进行了优化,并且在许多情况下性能差异可能并不显着。

在您的特定场景中,当您处理可能超出

Int
范围的数值时,使用
toLong()
是一种合理的方法。它确保您的应用程序可以处理更大的值而不会遇到溢出问题。

请记住,选择适当的数据类型也会受到数据语义的影响。如果您正在使用的值在逻辑上表示整数并且落在

Int
的范围内,则使用
Int
是有意义的。如果您的数据需要更大的范围,那么
Long
是合适的选择。

© www.soinside.com 2019 - 2024. All rights reserved.