如何在Go中将int64转换为int?

49
在Go语言中,将int64转换为int的最佳策略是什么?我很难比较这两种类型。
package main 

import (
    "math"
    "strings"
    "strconv"
)

type largestPrimeFactor struct {
    N      int
    Result int
}

func main() {
    base := largestPrimeFactor{N:13195}
    max := math.Sqrt(float64(base.N))

    maxStr := strconv.FormatFloat(max, 'E', 'G', 64)
    maxShift := strings.Split(maxStr, ".")[0]
    maxInt, err := strconv.ParseInt(maxShift, 10, 64)

    if (err != nil) {
        panic(err)
    }

在下一行上

    for a := 2; a < maxInt; a++ {
        if isPrime(a) {
            if base.N % a == 0 {
                base.Result = a
            }
        }
    }

    println(base)
}

func isPrime(n int) bool {
    flag := false

    max := math.Sqrt(float64(n))

    maxStr := strconv.FormatFloat(max, 'E', 'G', 64)
    maxShift := strings.Split(maxStr, ".")[0]
    maxInt, err := strconv.ParseInt(maxShift, 10, 64)

    if (err != nil) {
        panic(err)
    }

    for a := 2; a < maxInt; a++ {
        if (n % a == 0) {
            flag := true
        }
    }
    return flag
}
3个回答

75

你可以使用一种类型 "conversion" 进行转换。

var a int
var b int64
int64(a) < b

比较值时,您总是希望将较小的类型转换为较大的类型。反过来转换可能会截断该值:

var x int32 = 0
var y int64 = math.MaxInt32 + 1 // y == 2147483648
if x < int32(y) {
// this evaluates to false, because int32(y) is -2147483648

要将maxIntint64值转换为int,您可以使用以下代码:

for a := 2; a < int(maxInt); a++ {

如果maxInt超出了你的系统int类型的最大值,那么代码将无法正确执行。


@pward 这是关于 Go 语言数字类型的起点,可能会有所帮助 https://golang.org/ref/spec#Numeric_types - Corbin
12
需要注意的是,尽管此答案经过了检查,但从技术上讲并没有解决所提出的问题,即如何将int64转换为int。 - pward
2
@pward:它还通过一个示例向您展示了为什么应该关注截断。就像您应该知道为什么在javascript中0.1 * 0.2 == 0.020000000000000004一样,您应该了解整数类型的工作原理。您在这里遇到了X Y问题 - 您想让代码工作,但您要求的解决方案是不正确的解决方案。 - JimB
为什么认为int64int更大是正确的? - ceving
@ceving,这不是正确的假设,假设int64int更大或者相等,因此从int转换为int64将永远不会丢失数据,而反向情况则不成立。 - JimB
显示剩余2条评论

28

我来到这里是因为标题上的"如何在Go中将int64转换为int?"。答案是,

int(int64Var)

1
有疑问,但核实后确认这是无损转换。https://go.dev/play/p/DjuxXVsysKy - avp

-2

使用strconv包是正确的。

strconv.FormatInt(int64Var, 10)

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接