You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang中big.Int大数除法结果异常为0问题求助

问题:Golang big.Int大数除法返回0异常

在使用Golang的big.Int进行大数除法时,出现取模运算正常,但除法结果始终为0的问题。相关代码及运行输出如下:

for {
        fmt.Println("number is", number)
        // key := number % 10
        key := number.Mod(number, big.NewInt(10))
        fmt.Println("key", key)
        // number = number / 10
        first := new(big.Int).Div(number, big.NewInt(10))
        fmt.Println("first ", first)

        number = first
        fmt.Println(number) //number = 0 always as a first variable too
... }

运行输出示例:

number is 6689502913449127057588118054090372586752746333138029810295671352301633557244962989366874165271984981308157637893214090552534408589408121859898481114389650005964960521256960000000000000000000000000000
key  0
first  0
0

问题原因

big.Int的所有方法(包括Mod)都会直接修改调用该方法的变量本身,而非仅返回结果。你执行number.Mod(number, big.NewInt(10))时,已经把原number的值替换成了取模后的结果(也就是0),之后再用这个被修改后的number做除法,自然得到0。

正确执行大数除法的方法

不要直接用原number调用Mod方法,而是新建一个临时big.Int变量存储取模结果,保留原number的值用于后续除法运算:

for {
        fmt.Println("number is", number)
        // 用临时变量存取模结果,不修改原number
        key := new(big.Int).Mod(number, big.NewInt(10))
        fmt.Println("key", key)
        // 此时number还是原始值,除法正常执行
        first := new(big.Int).Div(number, big.NewInt(10))
        fmt.Println("first ", first)

        number = first
        fmt.Println(number)
... }

这样修改后,取模操作不会破坏原number的值,除法就能得到正确结果。

内容的提问来源于stack exchange,提问作者ar rr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 13:33:05