doufu5401 2017-04-08 06:29
浏览 408
已采纳

如何在Go中使用大整数?

I need to perform operations, such as exponentiation and division, on large values of int64 in Go, but I have problems with overflow. I tried converting them to float64, but then I run into other problems. Here is what I tried.

I have an integer variable, which I had to cast into a float64 to use the handy math package (https://golang.org/pkg/math).

However, it doesn't cast correctly when the integer variable is too big. I'm assuming it's because the size is bigger than float64. ex:

fmt.Printf("%f",float64(111111111111111110)) //Outputs 111111111111111104.000000

I'm trying to use math.Mod, math.Pow10, and math.Log10. How would I be able to do the following logic, but with a large number shown above?

int(math.Mod(float64(123) / math.Pow10(1),10))) // Gets the second digit
  • 写回答

2条回答 默认 最新

  • doubei2340 2017-04-08 07:41
    关注

    The question is not really clear to me, but I assume you want to perform operations on large integers and were only using float64 as a try.

    In that case, the right tool is the math/big package. Here is how to use it to extract the nth decimal digit of an int64:

    // 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()
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路