Go_数据类型转换(Sprintf、Format)

数据类型转换:

  • 类型转换是将一种数据类型的变量转为另一种类型的变量
  • Go强制要求使用显式类型转换。所以语法更能确定语句及表达式的明确含义
  • 转换的时候如果大的转给小的,会有精度损失(数据溢出)比如int64转int8

转换格式:

	// 将v转成T类型,但是v本身的数据类型并不会改变,只是把v变量的值类型转成T
	表达式 T(v) 

演示:

func main() {
	var a int32 = 1999999      // 小转大一样要显示转换
	var b float64 = float64(a) // a转b  a本身数据类型并不会改变,只是把a的值(1999999)转成了float64
	var c int8 = int8(a)       // 大转小不会报错,但是数据溢出会丢失数据
	fmt.Println("c:", c)
	fmt.Printf("a的数据类型是:%T\n  b的数据类型是:%T\n  c的数据类型是:%T\n", a, b, c)
}

输出:

c: 127
a的数据类型是:int32
b的数据类型是:float64
c的数据类型是:int8

转换必须确保类型一致,不能将非bool类型结果当做true/false使用

func main() {
	x := 100
	var b bool = x // 错误:无法将 'x' (类型 int) 用作类型 bool
	if x {         // 非布尔值 'x' (类型 int) 用作条件
	}
}

基本类型转string:

Sprintf():格式化为字符串

Sprintf和printf的区别:printf是将一个格式化的字符串打印到控制台,Sprintf是转换为字符串

参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。

格式:

接收变量 = fmt.Sprintf(%格式符,参数列表)

演示:

func main() {
	var (
		num1 int     = 9
		num2 float64 = 9.99
		b    bool    = false
		c    byte    = 'a'
		str  string
	)

	str = fmt.Sprintf("%d", num1)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%f", num2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%t", b)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = fmt.Sprintf("%c", c)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:9
str的类型: string      值:9.990000
str的类型: string      值:false
str的类型: string      值:a
strconv.Format方式:

strconv.Itoa可以将数字转换成字符串类型的数字

func main() {
	var (
		num  int     = 24
		num2 float64 = 1.111
		str  string
	)

	// FormatInt参数1:要转的变量  参数2:进制
	str = strconv.FormatInt(int64(num), 10)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// strconv.FormatInt也可以用来转换进制,比如将10进制转换为2进制,其它进制,换掉后面的数字就可以了
	str = strconv.FormatInt(123, 2)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	// 'f':格式  10:保留10位   64:float64
	str = strconv.FormatFloat(num2, 'f', 10, 64)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.FormatBool(false)
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)

	str = strconv.Itoa(num) 
	fmt.Printf("str的类型: %T\t 值:%v\n ", str, str)
}

输出:

str的类型: string      值:24
str的类型: string      值:1111011
str的类型: string      值:1.1110000000
str的类型: string      值:false
str的类型: string      值:24

string转基本类型:

将string类型转换成基本数据类型时,要确保string类型能够转成有有效的数据

例:可以把"123"转成int类型,但是不可以将"aaa"转成int类型,编译器不会报错,go会把它变成默认值0,因为go会判断这个值能不能转成有效的数据,如果不可以会按照该数据的数据类型的默认值赋值。

strconv方式:
func main() {
	var (
		str string = "123"
		i   int64  // 这里只能用int64
		f   float64
		b   bool
	)
	// str:字符串	base:进制	bitSize:数据类型
	i, _ = strconv.ParseInt(str, 10, 64)
	fmt.Printf("i的类型: %T\t 值:%v\n ", i, i)

	f, _ = strconv.ParseFloat(str, 64)
	fmt.Printf("f的类型: %T\t 值:%v\n ", f, f)

	b, _ = strconv.ParseBool(str)
	fmt.Printf("b的类型: %T\t 值:%v\n ", b, b)

	s, _ := strconv.Atoi("str")
	fmt.Printf("s的类型: %T\t 值:%v\n ", s, s)
}

输出:

i的类型: int64     值:123
f的类型: float64   值:123
b的类型: bool      值:false
s的类型: int       值:0

字符串转字节切片

func main() {
	// 字符串转切片
	var b = []byte("itzhuzhu")
	fmt.Println("b = ", b)

	// 切片转字符串
	var str = string([]byte{97, 98, 99})
	fmt.Println("str = ", str)
}

输出:

b =  [105 116 122 104 117 122 104 117]
str =  abc
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzhuzhu.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值