2012-05-25 4 views
12

長い数字の桁(50桁)をGoの整数に変換するにはどうすればよいですか?Goで大きな整数値を使用しますか? (ParseIntは "2147483647"に変換するだけです)

number = 2147483647 

ERR = strconv.ParseInt: "37107287533902102798797998220837590246510135740250 " の解析:

私は以下のコードの出力取得していた値の範囲外を

出来そうです数字を2147483647まで変換するだけです。

package main 

import "fmt" 
import "io/ioutil" 
import "strings" 
import "strconv" 

var (
     number int64 
) 

func main() { 
    fData,err := ioutil.ReadFile("one-hundred_50.txt") 
    if err != nil { 
      fmt.Println("Err is ",err) 
     } 
    strbuffer := string(fData) 
    lines := strings.Split(strbuffer, "\n") 

    for i, line := range lines { 
     fmt.Printf("%d: %s\n", i, line) 
     number, err := strconv.Atoi(line) 
     fmt.Println("number = ", number) 
     fmt.Println("err = ", err) 
    } 
} 
+4

整数は、通常、4または8バイトで格納されます。これは50桁を格納するのに十分ではなく、2147483647は(2^31-1)に対応します。これは4バイト(またはより正確には32ビット)で格納された符号付き2の補数の限界です。 Goに "Big Integer"タイプがあるかどうかを確認します。 –

答えて

26

math/bigパッケージが必要です。これは、任意精度の整数サポートを提供します。

import "math/big" 

func main() { 
    // ... 
    for i, line := range lines { 
     bi := big.NewInt(0) 
     if _, ok := bi.SetString(line, 10); ok { 
      fmt.Printf("number = %v\n", bi) 
     } else { 
      fmt.Printf("couldn't interpret line %#v\n", line) 
     } 
    } 
} 

ここにはquick exampleが有効です。

関連する問題