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

如何在Go中将int64转换为int?,go,int,int64,Go,Int,Int64,在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(

在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
}
对于a:=2;a
您可以使用类型转换它们


如果
maxInt
溢出系统上
int
类型的最大值,则无法正确执行

@pward JavaScript中没有整数类型。只有一种数字数据类型,名为Number,它是双精度浮点数,而不是整数。需要注意的是,尽管这个答案是经过检查的,但从技术上讲,它并不能解决这个问题所带来的问题,这就是如何将int64转换为int。@JimB我不是说你所说的不起作用,也不容易理解。我的意思是,它与我在问题中希望的转换方式相反。你的答案是通过假设我关心截断来操纵这种欲望。@pward:它还通过一个例子说明了为什么你应该关心截断。您应该了解整数类型是如何工作的,就像您应该知道为什么在javascript中
0.1*0.2==0.0200000000000000004
一样。这里有一个例子——你想要的是让代码工作,但你要求的解决方案是不正确的。@JimB-Hmm,这是一个关于xy问题的有趣理论。在我看来,我认为更合理的做法是简单地用“你不能那样做”或“这个问题无法解决”来回答像我这样的问题,因为至少这个回答保留了问题的完整性。我说您的解决方案不能回答我的问题,因为它假设我想要的答案是正确的效果,例如“您想要的是代码工作”。我很感激你给我指出了一个更好的方向!
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
for a := 2; a < int(maxInt); a++ {