当前位置: 首页 > news >正文

go strconv包介绍

文章目录

  • 字符串转整型
  • 整型转字符串
  • 字符串转布尔值
  • 布尔值转字符串
  • 转换成 Go 字符串
  • 字符串转浮点数
  • 浮点数转字符串
  • 字符串转复数
  • 复数转字符串
  • 字符串追加数据


字符串转整型

func Atoi(s string) (int, error)

s是要转换的字符串,返回值一个是转换后的int值,一个是错误,当转换成功的话error为nil。
正数负数都可以转换,超过范围、或者无法转换可以通过返回值error来分辨。

package mainimport ("fmt""strconv"
)func main() {ints1, err1 := strconv.Atoi("123456")fmt.Println(ints1, err1)ints2, err2 := strconv.Atoi("123456111111111111111111111111111111111111111111111111111111")fmt.Println(ints2, err2)ints3, err3 := strconv.Atoi("-854")fmt.Println(ints3, err3)}

在这里插入图片描述

整型转字符串

func Itoa(i int) string

一个返回值类型为string,和Atoi不一样,Atoi有俩返回值,Itoa只有一个
正数负数都可转换

package mainimport ("fmt""strconv"
)func main() {str1 := strconv.Itoa(256)fmt.Println(str1)str2 := strconv.Itoa(-256)fmt.Println(str2)str3 := strconv.Itoa(+256)fmt.Println(str3)
}

在这里插入图片描述

字符串转布尔值

func ParseBool(str string) (bool, error)

作用是把下面的字符串转换为bool值,比如传入个1,会返回个bool类型的true,传入个0,会返回个bool类型的false

“1”, “t”, “T”, “true”, “TRUE”, “True” // true
“0”, “f”, “F”, “false”, “FALSE”, “False” // false

package mainimport ("fmt""strconv"
)func main() {parseBool, err := strconv.ParseBool("1")fmt.Println(parseBool, err)b, err := strconv.ParseBool("true")fmt.Println(b, err)b2, err := strconv.ParseBool("FALSE")fmt.Println(b2, err)
}

在这里插入图片描述

布尔值转字符串

func FormatBool(b bool) string

传入一个bool值,返回一个全小写无引号的true或者false字符串

package mainimport ("fmt""strconv"
)func main() {var t bool = truevar f bool = falsefmt.Println(strconv.FormatBool(t))fmt.Println(strconv.FormatBool(f))
}

在这里插入图片描述

转换成 Go 字符串

func Quote(s string) string
func QuoteToASCII(s string) string

Quote 保留原始字符,非 ASCII 字符(如中文)直接输出。
QuoteToASCII 将非 ASCII 字符(如中文)转义为 Unicode 转义序列(\uXXXX)。

package mainimport ("fmt""strconv"
)func main() {fmt.Println(strconv.Quote("hello 世界"))        // 输出: "hello 世界"fmt.Println(strconv.QuoteToASCII("hello 世界")) // 输出: "hello \u4e16\u754c"
}

在这里插入图片描述

字符串转浮点数

func ParseFloat(s string, bitSize int) (float64, error)

s是要转换的字符串
bitsize是位数,必须是32或者64其中一个,表示转为为32位精度还是64位精度。
32位精度在6-7位,64位精度在15-16位

package mainimport ("fmt""strconv"
)func main() {float, err := strconv.ParseFloat("3.1415926", 32)fmt.Println(float, err)float, err = strconv.ParseFloat("1.14576247456852556", 64)fmt.Println(float, err)
}
  1. 第一行输出:3.141592502593994(bitSize=32)
    输入字符串:“3.1415926”(7 位有效数字)。
    实际解析:
    字符串被解析为 float32 精度(约 6-7 位有效数字),但返回的是 float64 类型。
    float32 无法精确表示 3.1415926,因此发生了舍入:
    原始值 3.1415926 的二进制表示在 float32 中会被舍入为最接近的可表示值 3.141592502593994。
    为什么返回 float64?
    Go 的 ParseFloat 统一返回 float64,但数值范围受 bitSize 限制。若需 float32,需显式转换:float32(float)。
  2. 第二行输出:1.14576247456852556(bitSize=64)
    输入字符串:“1.14576247456852556”(17 位有效数字)。
    实际解析:
    字符串被解析为 float64 精度(约 15-16 位有效数字)。
    float64 能精确表示前 15-16 位,因此输出与输入几乎一致(末尾数字可能因二进制浮点表示略有差异)。
    在这里插入图片描述

浮点数转字符串

func FormatFloat(f float64, fmt byte, prec int, bitSize int) string

f float64:要格式化的浮点数(类型必须是 float64)。
fmt byte:格式化方式,取值范围:

  • 'f' (-ddd.dddd):普通小数格式。
  • 'e' (-d.dddde±dd):科学计数法(小写 e)。
  • 'E' (-d.ddddE±dd):科学计数法(大写 E)。
  • 'g' ('e''f' 的紧凑形式):根据情况自动选择 'e''f',以生成更短的字符串。
  • 'b' (-ddddp±dd):二进制指数格式(如 -123456p-78)。

prec int:控制精度(小数点后的位数或科学计数法的有效数字):

  • 对于 'f''e''E':表示小数点后的位数。
  • 对于 'g':表示最大有效数字(尾部的 0 会被省略)。
  • 对于 'b':忽略 prec

bitSize int: 指定 f 的原始类型(32 或 64),影响解析时的舍入行为:

  • 32ffloat32 转换来的 float64,格式化时会按 float32 精度处理。
  • 64f 是原始 float64 值,按完整精度处理。

package mainimport ("fmt""strconv"
)func main() {f := 3.141592653589793// 1. 普通小数格式 ('f')fmt.Println(strconv.FormatFloat(f, 'f', 2, 64)) // 3.14fmt.Println(strconv.FormatFloat(f, 'f', 5, 64)) // 3.14159// 2. 科学计数法 ('e')fmt.Println(strconv.FormatFloat(f, 'e', 3, 64)) // 3.142e+00fmt.Println(strconv.FormatFloat(f, 'E', 3, 64)) // 3.142E+00// 3. 自动选择 'e' 或 'f' ('g')fmt.Println(strconv.FormatFloat(f, 'g', 4, 64)) // 3.142fmt.Println(strconv.FormatFloat(123456.0, 'g', 4, 64)) // 1.235e+05// 4. 二进制指数格式 ('b')fmt.Println(strconv.FormatFloat(f, 'b', 0, 64)) // 7074237752068736p-51// 5. bitSize 的影响(模拟 float32 的精度)f32 := float32(f)fmt.Println(strconv.FormatFloat(float64(f32), 'f', 5, 32)) // 3.14159 (float32 的精度)fmt.Println(strconv.FormatFloat(float64(f32), 'f', 10, 32)) // 3.1415927410 (float32 的精度限制)
}

在这里插入图片描述

字符串转复数

func ParseComplex(s string, bitSize int) (complex128, error)

s - 要转换的字符串
bitSize - 位数,必须是64或128其中之一

package mainimport ("fmt""strconv"
)func main() {fmt.Println(strconv.ParseComplex("1+2i", 128))fmt.Println(strconv.ParseComplex("1+2j", 128))//只支持 i 作为虚部单位 
}

在这里插入图片描述

复数转字符串

func FormatComplex(c complex128, fmt byte, prec, bitSize int) string

c- 复数
fmt - 格式化类型,参考浮点数格式化类型
prec - 参考浮点数精度
bitsize - 位数,必须是64或128之一

package mainimport ("fmt""strconv"
)func main() {fmt.Println(strconv.FormatComplex(complex(1.1, 12), 'f', 2, 128))fmt.Println(strconv.FormatComplex(complex(5.6, 2.8), 'b', 2, 128))fmt.Println(strconv.FormatComplex(complex(18.88999, 89.7), 'g', 2, 128))}

在这里插入图片描述

字符串追加数据

在 Java 中,字符串与其他类型(如数字)进行拼接时,会自动将非字符串类型转换为字符串。例如:

String result = "1" + 1;  // 结果为 "11",Java 自动将数字 1 转换为字符串 "1"

但在 go 里,这种隐式类型转换是不允许的。如果尝试直接拼接字符串和数字,编译器会报错:

result := "1" + 1  // 编译错误:invalid operation: "1" + 1 (mismatched types string and int)

go 要求显式处理类型转换。如果需要将数字(如 int、float64 等)拼接到字符串中,可以使用 strconv包提供的函数(如 FormatInt、FormatFloat 等),或直接使用 fmt.Sprintf`进行格式化。

但如果高效拼接字符串和数字(避免额外分配内存),Go 的 strconv包还提供了 Append系列函数,可以直接将数字的字符串表示追加到现有的 []byte切片中,减少内存分配。

package mainimport ("fmt""strconv"
)func main() {bytes := []byte("这里有一些数据:")bytes = strconv.AppendInt(bytes, 10, 10)bytes = strconv.AppendFloat(bytes, 1.2222, 'f', 2, 64)bytes = strconv.AppendBool(bytes, false)fmt.Println(string(bytes))}

在这里插入图片描述

http://www.dtcms.com/a/524533.html

相关文章:

  • 论文阅读12——基于学习的具有扩散行为的人流量预测方法
  • 对于随机变量x1, …, xn,其和的范数平方的期望不超过n倍各随机变量范数平方的期望之和
  • ARM《3》_学习c和汇编的混合编程
  • 硬件工程师11月实战项目-10G高速数字示波器开发
  • FPGA Debug:Vivado程序综合卡在了Run Synthesis
  • 免费网站建设推广服务什么样的公司愿意做网站
  • 世隆科技:无人船——开启水上智能作业新时代
  • 网站后台模板关联自己做的网站电商网站楼层 设计
  • 【北京迅为】iTOP-4412精英版使用手册-第六十八章 U-boot基础知识
  • 关于函数调用其实是函数指针+传参+解引用的一些思考
  • 奇缦科技珠海网站建设优化网站地图样本
  • 【设计模式】组合模式(Composite)
  • 【论文精读】Matten:融合 Mamba 与 Attention 的视频生成新范式
  • HTB Networked writeup(network-scripts提权)
  • 如何入门python机器学习?金融从业人员如何快速学习Python、机器学习?机器学习、数据科学如何进阶成为大神?
  • 网站开发技术交流中国国家培训网
  • 网站无法做301重定向网站查询域名入口
  • 国产数据库MongoDB兼容性技术分析与实践对比
  • 350做网站深圳零基础网站建设入门到精通视频教程
  • 冒泡排序代码实现详解
  • 金仓多模数据库平替MongoDB的电子证照国产化实践——从2TB数据迁移到1600+并发支撑
  • 【优先级队列(堆)】3.前 K 个⾼频单词 (medium)
  • 苏州建站公司 诚找苏州聚尚网络设计图案用什么软件
  • 数据结构——快速排序
  • IntelliJ IDEA新版下载、安装、创建项目及Maven配置的教程(附安装包等)
  • C++特性详解:extern、缺省参数、函数模板与名字空间
  • VUE+Electron从0开始搭建开发环境
  • MongoDB 平替新方案:金仓多模数据库驱动电子证照国产化落地
  • 项目(一)
  • SaaS多租户架构实践:字段隔离方案(共享数据库+共享Schema)