类型转换
实际开发里,不同类型之间经常需要互相转换:字符串转数字、数字转字符串、浮点数转整数、整数转浮点数,等等。
数字的转换
比如有一个浮点数 3.1415926535,想把它变成整数,可以用 int() 来转换:
1package main 2import "fmt" 3 4func main() { 5 num := 3.1415926535 6 intNum := int(num) 7 fmt.Println(intNum) // 3 8} 9
可以看到,int() 会把浮点数转成整数,并直接舍去小数部分(不是四舍五入)。
其他数值类型的转换写法也类似,记起来很简单——跟定义类型时的名字一模一样:
int():转为intint8():转为int8int16():转为int16int32():转为int32int64():转为int64uint():转为uintuint8():转为uint8uint16():转为uint16uint32():转为uint32uint64():转为uint64float32():转为float32float64():转为float64
数字转字符串
数字和字符串之间的转换要用 strconv(string convert,字符串转换)包。比如把整数 3 转成字符串:
1package main 2 3import ( 4 "fmt" 5 "strconv" 6) 7 8func main() { 9 num := 3 10 strNum := strconv.Itoa(num) 11 fmt.Printf("类型: %T,值: %v", strNum, strNum) 12 // 类型: string,值: 3 13} 14
几点说明:
- 导入多个包时,用
()分组,每个包独占一行。 strconv.Itoa()就是 Int to ASCII:把整数转成字符串(字符串本质上是字符序列)。fmt.Printf()里,%T打印类型,%v打印值。
字符串转数字
反过来,字符串转数字也很常见。Go 里字符串和数字不能直接运算,必须先转成同一类型。比如这样会报错:
1var a = "10" 2var b = 20 3var c = a + b // 错误:字符串和数字不能直接运算 4
这时可以用 strconv.Atoi() 把字符串转成整数:
1package main 2 3import ( 4 "fmt" 5 "strconv" 6) 7 8func main() { 9 str := "10" 10 num, _ := strconv.Atoi(str) 11 fmt.Printf("类型: %T,值: %v", num, num) 12 // 类型: int,值: 10 13} 14
Atoi 是 ASCII to Int 的缩写。它会返回两个值:转换结果和错误。转换失败时第二个返回值不为 nil;这里用 _ 忽略错误,表示暂时不处理失败情况。
字符串转布尔值
字符串转布尔用 strconv.ParseBool()。它同样返回「结果 + 错误」两个值:
1package main 2 3import ( 4 "fmt" 5 "strconv" 6) 7 8func main() { 9 str := "true" 10 b, _ := strconv.ParseBool(str) 11 fmt.Printf("类型: %T,值: %v", b, b) 12 // 类型: bool,值: true 13} 14
ParseBool 能识别的真值有:1、t、T、TRUE、true、True;假值有:0、f、F、FALSE、false、False。其他字符串都会转换失败。
布尔值转字符串
反过来,用 strconv.FormatBool() 把布尔值转成字符串,结果只会是 "true" 或 "false":
1package main 2 3import ( 4 "fmt" 5 "strconv" 6) 7 8func main() { 9 flag := true 10 str := strconv.FormatBool(flag) 11 fmt.Printf("类型: %T,值: %v", str, str) 12 // 类型: string,值: true 13} 14
作业
- 数值转换:声明一个
float64变量,值为9.99,用int()转成整数并打印;再把结果用float64()转回去,观察小数部分是否还在。 - 数字转字符串:声明一个
int变量表示年龄,用strconv.Itoa()转成字符串,再用fmt.Printf打印类型和值(确认类型是string)。 - 字符串转数字:声明两个字符串
"15"和"27",分别用strconv.Atoi()转成整数后相加,打印和。 - 布尔转换:把字符串
"1"、"false"、"yes"分别传给strconv.ParseBool(),打印每次转换的结果和错误(这次不要用_忽略错误,看看哪些能成功)。 - 综合练习:声明字符串价格
"199.5"和折扣标记"true"。先把价格用strconv.ParseFloat(str, 64)转成float64,折扣标记用ParseBool转成布尔;若享受折扣则打八折,最后用strconv.FormatFloat把应付金额转成字符串并打印。
《Go语言第四章(类型转换)》 是转载文章,点击查看原文。