基本类型的转换
作者: ryan 发布于: 5/14/2025 更新于: 5/14/2025 字数: 0 字 阅读: 0 分钟
在软件开发中,数据经常需要在不同格式之间转换,例如当用户输入通常以字符串形式提供(例如命令行参数、Web 表单数据),但程序可能需要将其作为数字或布尔值处理。
Strconv 可以帮助将这些字符串转换为程序所需的类型。
例如:
- 将用户输入的
"123"转换为整数:strconv.Atoi("123")。 - 将用户输入的
"true"转换为布尔值:strconv.ParseBool("true")。 - 程序中的数据(如计算结果)需要格式化为字符串以显示给用户或记录到日志中。
- 将浮点数
123.456格式化为保留两位小数的字符串:strconv.FormatFloat(123.456, 'f', 2, 64),结果为"123.46"。
Strconv
strconv 包是 Go 标准库中的一个包,全称 "string conversion"(字符串转换)。它的主要作用是在字符串和其他基本数据类型之间进行转换。
字符串转换为浮点数(float64)
strconv.ParseFloat 将字符串 str 转换为 float64 类型
str := "3.14159"
f, err := strconv.ParseFloat(str,64)
if err !=nil {
fmt.Println("转换错误:",err)
} else {
fmt.Println("转换成功",f)
}参数:
str:要转换的字符串,这里是"3.14159"。64:表示目标浮点数的位数,即float64(Go 中浮点数通常是 32 位或 64 位,这里是 64 位)。
返回值:
f:转换后的浮点数,结果为3.14159。err:错误对象。如果字符串无法转换为浮点数(例如"abc"),err不为空。
如果需要 float32,可以调用 ParseFloat 后显式转换为 float32,如 float32(f)。
字符串转换为整数(int64)
strconv.ParseInt 将字符串 "-42" 转换为 int64 类型。
parseInt, err := strconv.ParseInt("-42", 10, 64)
if err != nil {
return
}
fmt.Println(parseInt)参数:
"-42":要转换的字符串。10:进制,这里是十进制。64:目标整数的位数,即 int64(可以是 0 到 64 位,0 表示默认 int 类型)。
返回值:
parseInt:转换后的整数,结果为-42。err:错误对象。如果字符串无效(例如"xyz"),err 不为空。
字符串转换为布尔值(bool)
strconv.ParseBool 将字符串 "1" 转换为布尔值 true
parseBool, err := strconv.ParseBool("1")
if err != nil {
fmt.Println("ParseBool error")
}
fmt.Println(parseBool)参数:该函数接受以下字符串
表示 true:"1"、"t"、"T"、"true"、"TRUE"、"True"。
表示 false:"0"、"f"、"F"、"false"、"FALSE"、"False"。返回值:
parseBool:转换后的布尔值,这里是true。err:如果输入无效(例如 "yes"),返回错误。
基本类型转换为字符串
布尔值转换为字符串
strconv.FormatBool 将布尔值 true 转换为字符串 "true"。
boolStr := strconv.FormatBool(true)
fmt.Println(boolStr)输出:
"true"(如果是 false,则输出 "false")。
浮点数转换为字符串
strconv.FormatFloat 将 float64 值转换为字符串
floatStr := strconv.FormatFloat(3.14159, 'E', -1, 64)
fmt.Println(floatStr)
floatStr2 := strconv.FormatFloat(3.14159, 'f', -1, 64)
fmt.Println(floatStr2)参数:
3.14159:要转换的浮点数。'E'或'f':格式化选项。'E':科学计数法,输出如"3.14159E+00"。'f':固定小数点格式,输出如"3.14159"。-1:精度,-1表示使用最少的必要位数。64:表示输入是float64类型。
整数转换为字符串
strconv.FormatInt 将 int64 值转换为字符串。
intStr := strconv.FormatInt(-42, 16)
fmt.Println(intStr)参数:
-42:要转换的整数。16:进制,这里是十六进制。
ParseInt 和 Atoi的区别
strconv.ParseInt 用作将字符串转换为指定位数的整数(通常是 int64),接收参数 : 字符串(如 "42")。 进制(如 10 表示十进制,16 表示十六进制)。 位数(如 64 表示 int64)。 返回值是int64 和 error。
因此当需要处理不同进制(如十六进制 "2a")或明确需要 int64 类型时用 ParseInt。
strconv.Atoi 用于将十进制字符串直接转换为 int 类型(注意不是 int64)。 它接收的参数仅接受字符串,无需指定进制或位数(固定为十进制)。 返回值是 int 和 error。
因为strconv.Atoi不支持自定义进制或位数,所以当只需要将十进制字符串转换为默认 int 类型,且代码追求简洁时用 Atoi。
| 特性 | ParseInt | Atoi |
|---|---|---|
| 返回类型 | int64(可指定位数) | int |
| 进制支持 | 可指定(如 2、8、10、16) | 仅十进制 |
| 参数灵活性 | 高 | 低(简化版) |
| 使用场景 | 需要特定进制或位数 | 简单十进制转换 |
