プログラミング
記事内に商品プロモーションを含む場合があります

Go言語:数値→文字列、文字列→数値変換

Aru

Go言語で数値から文字列、文字列から数値に変換する標準ライブラリの関数をまとめました。基本的なパターンは網羅しましたつもりですので、チートシートとして利用してもらえればと思います。

はじめに

Go言語で数値と文字列を変換する関数をまとめました。

Go言語では、このあたりの変換はstrconvパッケージにまとめられています。

この記事では、strconvパッケージを使った文字列と数値間の変換関数のうち、よく使うものをサンプルコードと合わせて紹介します。

Go言語の文字列から数値、数値から文字列の変換

Go言語では、文字列と数値の変換にstrconvパッケージを利用します。以下、主な変換関数です。

int→string

整数を文字列に変換します。

func Itoa(i int) string
package main

import (
	"fmt"
	"strconv"
)

func main() {
	num := 12345

	str := strconv.Itoa(num)
	fmt.Println(str)
}

string→int

文字列をintに変換します。変換でerrorが発生した場合は、errornil以外になります。

func Atoi(s string) (int, error)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	s := "123"

	v, err := strconv.Atoi(s)
	if err != nil {
		panic(err)
	}
	fmt.Println(v)
}

int64→string

baseはn進数を意味していて2~36です。

func FormatInt(i int64, base int) string
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var num int64 = 255

	str := strconv.FormatInt(num, 10)
	fmt.Println(str)

	str = strconv.FormatInt(num, 2)
	fmt.Println(str)

	str = strconv.FormatInt(num, 16)
	fmt.Println(str)
}

string→int64

baseを指定することで文字列をn進数(2~36進数)として入力可能です。base=0を指定すると、"0b", "0o", "0x"が接頭文字列としてある場合は2,8,16進数として変換します。

bitSizeは、変換後のbit数(0~64)を指定します。0, 8, 16, 32, 64は、int, int8, int16, int32, int64型に対応します。

変換でerrorが発生した場合は、errornil以外になります。

func ParseInt(s string, base int, bitSize int) (i int64, err error)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	s := "511"

	num, err := strconv.ParseInt(s, 10, 64)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)

	s = "111"
	num, err = strconv.ParseInt(s, 2, 64)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)

	s = "0xff"
	num, err = strconv.ParseInt(s, 0, 64)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)

}

uint64→string

FormatIntuint64版です。

func FormatUint(i uint64, base int) string
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var num uint64 = 123

	str := strconv.FormatUint(num, 10)
	fmt.Println(str)
}

string→uint64

func ParseUint(s string, base int, bitSize int) (uint64, error)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	s := "c0"

	num, err := strconv.ParseUint(s, 16, 32)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)

	s = "123"
	num, _ = strconv.ParseUint(s, 10, 64)
	fmt.Println(num)
}

bool→string

func FormatBool(b bool) string
package main

import (
	"fmt"
	"strconv"
)

func main() {
	flg := true
	str := strconv.FormatBool(flg)
	fmt.Println(str)
}

string→bool

以下の文字列を論理値に変換します。

変換可能な文字列
1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False

func ParseBool(str string) (bool, error)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	s := "TRUE"
	str, err := strconv.ParseBool(s)
	if err != nil {
		panic(err)
	}
	fmt.Println(str)
}

float64→string

precで精度を指定します。bitSizeは32または64で指定したビット数で丸められます。fmtはフォーマットで意味は下に示します。

func FormatFloat(f float64, fmt byte, prec, bitSize int) string
fmの意味
  • ‘b’ (-ddddp±ddd, a binary exponent),
  • ‘e’ (-d.dddde±dd, a decimal exponent),
  • ‘E’ (-d.ddddE±dd, a decimal exponent),
  • ‘f’ (-ddd.dddd, no exponent),
  • ‘g’ (‘e’ for large exponents, ‘f’ otherwise),
  • ‘G’ (‘E’ for large exponents, ‘f’ otherwise),
  • ‘x’ (-0xd.ddddp±ddd, a hexadecimal fraction and binary exponent), or
  • ‘X’ (-0Xd.ddddP±ddd, a hexadecimal fraction and binary exponent).
package main

import (
	"fmt"
	"strconv"
)

func main() {
	num := 1.41421356

	str := strconv.FormatFloat(num, 'f', 8, 64)
	fmt.Println(str)

	str = strconv.FormatFloat(num, 'f', 4, 64)
	fmt.Println(str)

	str = strconv.FormatFloat(num, 'e', 4, 64)
	fmt.Println(str)

	str = strconv.FormatFloat(num*1000, 'e', 4, 64)
	fmt.Println(str)
}

string→float64

bitSizeは32または64で指定したビット数で丸められます

func ParseFloat(s string, bitSize int) (float64, error)
package main

import (
	"fmt"
	"strconv"
)

func main() {
	str := "2.2360679"

	num, err := strconv.ParseFloat(str, 64)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)

	str = "1.3e10"
	num, err = strconv.ParseFloat(str, 64)
	if err != nil {
		panic(err)
	}
	fmt.Println(num)
}

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました