在go语言中经常用到字符串和其它类型进行转换,strconv包能实现这个功能。
1.string转int
有两种方法,可以使用func Atoi(s string) (i int, err error),Atoi代表Ascii to Integer。还可以使用func ParseInt(s string, base int, bitSize int) (i int64, err error),base为进制,值为2~36,如果为0,则会根据字符串自动判断,前置为"0x"的是16进制,前置为"0"的是8进制,其余的为10进制,bitSize是返回的整数类型,0、8、16、32分别代表int、int8、int16、int32。
func main() {
a,_:=strconv.Atoi("123456")
fmt.Printf("a values %v\n",a)
b,_:=strconv.ParseInt("123456",10,32)
fmt.Printf("b values %v\n",b)
c,_:=strconv.ParseInt("123456",10,16)
fmt.Printf("c values %v\n",c)
d,_:=strconv.ParseInt("111",2,32)
fmt.Printf("d values %v\n",d)
}
以上代码会打印出
a values 123456
b values 123456
c values 32767
d values 7
看一下c,由于返回的是int16类型的值,int16类型的值的范围为-32768~32767,超过了返回类型的范围,会被截断,所以选择返回值类型时要选择正确。
2.int转string
使用func Itoa(i int) string方法,将int类型的转string类型。
func main() {
var i int = 12345
s:=strconv.Itoa(i)
fmt.Printf("s values %v,type is %T",s,s)
}
以上会输出
s values 12345,type is string
3.string转bool
func main(){
fmt.Println(strconv.ParseBool("t"))
fmt.Println(strconv.ParseBool("TRUE"))
fmt.Println(strconv.ParseBool("true"))
fmt.Println(strconv.ParseBool("True"))
fmt.Println(strconv.ParseBool("0"))
fmt.Println(strconv.ParseBool("f"))
}
以上会输出
true <nil>
true <nil>
true <nil>
true <nil>
false <nil>
false <nil>
4.string转float
func ParseFloat(s string, bitSize int) (f float64, err error)
mian(){
f,err:=strconv.ParseFloat("20.58",64)
if err!=nil {
panic(err)
}
fmt.Printf("%v,%T",f,f)
}
输出
20.58,float64
5.float转string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
其中fmt表示格式,’f’(-ddd.dddd)、’b’(-ddddp±ddd,指数为二进制)、’e’(-d.dddde±dd,十进制指数)、’E’(-d.ddddE±dd,十进制指数)、’g’(指数很大时用’e’格式,否则’f’格式)、’G’(指数很大时用’E’格式,否则’f’格式);prec表示控制的精度(排除指数部分):对’f’、’e’、’E’,它表示小数点后的数字个数;对’g’、’G’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。
mian(){
str:=strconv.FormatFloat(23.5670,'f',-1,64)
str2:=strconv.FormatFloat(23.5670,'f',5,64)
fmt.Println(str)
fmt.Println(str2)
}
输出
23.567
23.56700