基本类型的转换
作者: ryan 发布于: 2025/5/14 更新于: 2025/5/14 字数: 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) | 仅十进制 |
参数灵活性 | 高 | 低(简化版) |
使用场景 | 需要特定进制或位数 | 简单十进制转换 |