Skip to content

基本类型的转换

作者: 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 类型

go
	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 类型。

go

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

go

parseBool, err := strconv.ParseBool("1")
if err != nil {
    fmt.Println("ParseBool error")
}
fmt.Println(parseBool)

参数:该函数接受以下字符串

go

表示 true"1""t""T""true""TRUE""True"
表示 false"0""f""F""false""FALSE""False"

返回值:

  • parseBool:转换后的布尔值,这里是 true
  • err:如果输入无效(例如 "yes"),返回错误。

基本类型转换为字符串

布尔值转换为字符串

strconv.FormatBool 将布尔值 true 转换为字符串 "true"

go

boolStr := strconv.FormatBool(true)
fmt.Println(boolStr)

输出:

"true"(如果是 false,则输出 "false")。

浮点数转换为字符串

strconv.FormatFloatfloat64 值转换为字符串

go

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.FormatIntint64 值转换为字符串。

go

intStr := strconv.FormatInt(-42, 16)
fmt.Println(intStr)

参数:

  • -42:要转换的整数。
  • 16:进制,这里是十六进制。

ParseInt 和 Atoi的区别

strconv.ParseInt 用作将字符串转换为指定位数的整数(通常是 int64),接收参数 : 字符串(如 "42")。 进制(如 10 表示十进制,16 表示十六进制)。 位数(如 64 表示 int64)。 返回值是int64error

因此当需要处理不同进制(如十六进制 "2a")或明确需要 int64 类型时用 ParseInt。

strconv.Atoi 用于将十进制字符串直接转换为 int 类型(注意不是 int64)。 它接收的参数仅接受字符串,无需指定进制或位数(固定为十进制)。 返回值是 interror

因为strconv.Atoi不支持自定义进制或位数,所以当只需要将十进制字符串转换为默认 int 类型,且代码追求简洁时用 Atoi。

特性ParseIntAtoi
返回类型int64(可指定位数)int
进制支持可指定(如 2、8、10、16)仅十进制
参数灵活性低(简化版)
使用场景需要特定进制或位数简单十进制转换

Updated at: