我需要对Go中的大值int64执行取幂和除法等操作,但是我遇到溢出问题。我尝试将它们转换为float64,但后来我遇到了其他问题。这是我试过的。
我有一个整数变量,我必须将其转换为float64以使用方便的数学包(https://golang.org/pkg/math)。
但是,当整数变量太大时,它无法正确投射。我假设它是因为它的大小比float64大。例如:
fmt.Printf("%f",float64(111111111111111110)) //Outputs 111111111111111104.000000
我试图使用math.Mod,math.Pow10和math.Log10。我如何能够执行以下逻辑,但上面显示了大量数字?
int(math.Mod(float64(123) / math.Pow10(1),10))) // Gets the second digit
答案 0 :(得分:3)
这个问题对我来说并不是很清楚,但我假设您想对大整数执行操作,并且只使用float64作为尝试。
在这种情况下,正确的工具是math/big package。以下是如何使用它来提取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, "ient)
var result big.Int
result.Mod(bigI, big.NewInt(10))
return result.Int64()
}
答案 1 :(得分:2)
您可以尝试将int转换为字符串,然后获取转换后的字符串中的数字
// n >= 1
func NthDigit(num int, n int) int {
return int(strconv.Itoa(num)[n-1]) - int('0')
}