如何在 Go 中处理大整数?

WCG*_*PR0 1 go

我需要在 Go 中对 int64 的大值执行取幂和除法等操作,但我遇到了溢出问题。我尝试将它们转换为 float64,但后来遇到了其他问题。这是我尝试过的。

我有一个整数变量,我必须将其转换为 float64 才能使用方便的数学包 ( https://golang.org/pkg/math )。

但是,当整数变量太大时,它不会正确转换。我假设这是因为大小大于 float64。前任:

fmt.Printf("%f",float64(111111111111111110)) //Outputs 111111111111111104.000000
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 math.Mod、math.Pow10 和 math.Log10。我如何才能执行以下逻辑,但上面显示的数字很大?

int(math.Mod(float64(123) / math.Pow10(1),10))) // Gets the second digit
Run Code Online (Sandbox Code Playgroud)

Zoy*_*oyd 5

这个问题对我来说不是很清楚,但我假设您想对大整数执行操作并且只是尝试使用 float64。

在这种情况下,正确的工具是math/big 包。以下是如何使用它来提取 int64 的第 n 个十进制数字:

// first digit is n=0
func nthDigit(i int64, n int64) int64 {
    var quotient big.Int
    quotient.Exp(big.NewInt(10), big.NewInt(n), nil)

    bigI := big.NewInt(i)
    bigI.Div(bigI, &quotient)

    var result big.Int
    result.Mod(bigI, big.NewInt(10))

    return result.Int64()
}
Run Code Online (Sandbox Code Playgroud)