Go语言中int、float、string类型之间相互的转换
golang是强类型语言,在应用过程中类型转换基本都会用到,下面这篇文章主要给大家介绍了关于Go语言中int、float、string类型相互之间的转换,需要的朋友可以参考下
目录
前言
整形转字符串
fmt.Sprintf
使用方法
strconv.Itoa
使用方法
strconv.FormatInt
入参
使用方法
浮点型转字符串
fmt.Sprintf
入参
使用方法
字符串转整形
strconv.Atoi
使用方法
strconv.ParseInt
使用方法
字符串转浮点型
strconv.ParseFloat
使用方法
总结
前言
Go 开发中经常设计到类型转换,本文就重点记录下 整形、浮点型和字符串类型互相转换的方法。
整形转字符串
fmt.Sprintf
将整数转为字符串,字符串可以是2进制、8进制、10进制或者16进制的表示。
格式 | 描述 |
---|---|
%b | 整型以二进制方式显示 |
%o | 整型以八进制方式显示 |
%d | 整型以十进制方式显示 |
%x | 整型以十六进制方式显示 |
%X | 整型以十六进制、字母大写方式显示 |
使用方法
1 2 3 4 | fmt.Sprintf("%d", int32(111)) // 111 fmt.Sprintf("%d", int64(111)) // 111 fmt.Sprintf("%d", 111) // 111 fmt.Sprintf("%b", 10) // 1010 |
strconv.Itoa
将 int 类型的整数 转为 10进制的字符串表示,底层调用的就是下一个方法: FormatInt(int64(i), 10)
1 2 3 4 | // Itoa is equivalent to FormatInt(int64(i), 10). func Itoa(i int) string { return FormatInt(int64(i), 10) } |
使用方法
我们可以把int32、int64 先转为 int,然后再使用该方法转换
1 | strconv.Itoa(1123) // 1123 |
strconv.FormatInt
将整数转为字符串,字符串可选2到36进制的字符串表示。
入参
i: int64类型的整数
base: 表示要转为的进制,支持2到36进制,使用最多的就是转为10进制
1 | func FormatInt(i int64, base int) string {} |
使用方法
我们可以把int32、int 先转为 int64,然后再使用该方法转换
1 2 | strconv.FormatInt(123, 10) // 123 strconv.FormatInt(123, 2) // 1111011 |
浮点型转字符串
fmt.Sprintf
支持 float32、float64 转 string
1 2 3 4 | fmt.Sprintf("%f", 3.12344) // 3.123440 // 控制输出小数位数 fmt.Sprintf("%.2f", 323.12344) // 323.12 strconv.FormatFloat |
入参
f:float64类型的浮点数
fmt: 转为字符串后,字符串的类型:
‘b’ (-ddddp±ddd):二进制指数
‘e’ (-d.dddde±dd):10进制指数
‘E’ (-d.ddddE±dd):10进制指数
‘f’ (-ddd.dddd):无指数
‘g’ :指数很大时使用’e',其他使用 ‘f’
‘G’ :指数很大时使用 ‘E’,其他使用’f'
‘x’ (-0xd.ddddp±ddd):十六进制分数和二进制指数
‘X’ (-0Xd.ddddP±ddd):十六进制分数和二进制指数
prec:控制经度
如果格式标记为 ‘e’、‘E’、‘f’、‘x’、‘X’,则 prec 表示小数点后的数字位数
如果格式标记为 ‘g’,‘G’,则 prec 表示总的数字位数(整数部分+小数部分)
bitSize:表示f最初的类型。(虽然入参f是float64,有可能是float32转过来的)
1 2 3 | func FormatFloat(f float64, fmt byte, prec, bitSize int) string { return string(genericFtoa(make([]byte, 0, max(prec+4, 24)), f, fmt, prec, bitSize)) } |
使用方法
1 2 | strconv.FormatFloat(3.1415926, 'f', 5, 64) // 3.14159 strconv.FormatFloat(3.1415926e5, 'f', 5, 64) // 314159.26000 |
字符串转整形
strconv.Atoi
string 转 int,默认字符串是10进制的,相当于是下个方法 ParseInt(s, 10, 0) 的 10 进制转化简版
1 | func Atoi(s string) (int, error) |
使用方法
1 2 | strconv.Atoi("1234") // 1234 <nil> strconv.Atoi("001") // 1 <nil> |
strconv.ParseInt
string 转 int32 int64 int,字符串可以是不同进制类型的。
1 2 3 4 | // s: 数字的字符串形式 // base: 数字字符串的进制,支持0以及2-36。如果该字段为0,会根据字符串的前缀来推断进制,比如"0b"->2进制、"0或0o"->8进制、"0x" -> 16进制 // bitSize: 返回结果的bit大小, 0 -> int, 8 -> int8、16 -> int16、32 -> int32、 64 -> int64。因为可以选择不同的 bitSize,所以统一转为int64,不会丢失精度。可根据需要的bitSize,自行转回去 func ParseInt(s string, base int, bitSize int) (i int64, err error) |
使用方法
1 2 3 4 5 6 7 8 9 10 11 12 | // 转int32 num, err := strconv.ParseInt("123",10,32) fmt.Println(int32(num), err) // 123 <nil> // 转int64 num, err := strconv.ParseInt("123", 10, 64) fmt.Println(num, err) // 123 <nil> // 转int num, err := strconv.ParseInt("123", 10, 64) fmt.Println(int(num), err) // 123 <nil> // 二进制转int64 num, err := strconv.ParseInt("0b1001", 0, 64) fmt.Println(int(num), err) // 9 <nil> |
字符串转浮点型
strconv.ParseFloat
1 2 3 4 5 6 7 8 9 10 | // s: 字符串 // bitSize: 要返回结果的精度 // 方法始终返回float64,即使 bitSize=32,返回 float64 也不会丢失精度 func ParseFloat(s string, bitSize int) (float64, error) { if bitSize == 32 { f, err := atof32(s) return float64(f), err } return atof64(s) } |
使用方法
1 2 3 | strconv.ParseFloat("123.213", 64) // 123.213 <nil>
strconv.ParseFloat("123.213e3", 64) // 123213 <nil> |
总结
本文介绍了整形、浮点型、字符串的互相转换方法,可以记住 fmt.Sprintf方法,以及 strconv 包,用到时根据 IDE 的方法提示就可以搞定了!
到此这篇关于Go语言中int、float、string类型之间相互转换的文章就介绍到这了
原文链接:https://lifelmy.github.io/post/2021_12_07_go_type_transfer/