3、数值类型之间的相互转换

1、数值类型之间的相互转换

数值类型包括:整形和浮点型

package main

import (
	"fmt"
	// "strings"
)

func main() {
	var a int8 = 20
	var b int16 = 40
	var c = int16(a) + b
	fmt.Printf("值:%v--类型%T", c, c)
}

输出

PS E:\go_study> go run .\main.go
值:60--类型int16
PS E:\go_study> 
package main

import (
	"fmt"
	// "strings"
)

func main() {
	var a float32 = 3.2
	var b int16 = 6
	var c = a + float32(b)
	fmt.Printf("值:%v--类型%T", c, c)
}

输出

PS E:\go_study> go run .\main.go
值:9.2--类型float32
PS E:\go_study> 

转换的时候建议从低位转换成高位,高位转换成低位的时候如果转换不成功就会溢出,和预想结果不一样。

例如:

package main

import (
	"fmt"
	// "strings"
)

func main() {
	var a int16 = 129
	var b = int8(a)
	fmt.Println("b=", b)
}

输出

PS E:\go_study> go run .\main.go
b= -127
PS E:\go_study> 

2、其他类型转换为String 类型

1> sprintf把其他类型转换成string 类型

**注意:**sprintf 使用中需要注意转换的格式 int 为%d float 为%f bool 为%t byte 为%c

package main

import (
	"fmt"
	// "strings"
)

func main() {
	var i int = 20
	var f float64 = 12.456
	var t bool = true
	var b byte = 'a'
	var strs string
	strs = fmt.Sprintf("%d", i)
	fmt.Printf("str type %T ,strs=%v \n", strs, strs)
	strs = fmt.Sprintf("%f", f)
	fmt.Printf("str type %T ,strs=%v \n", strs, strs)
	strs = fmt.Sprintf("%t", t)
	fmt.Printf("str type %T ,strs=%v \n", strs, strs)
	strs = fmt.Sprintf("%c", b)
	fmt.Printf("str type %T ,strs=%v \n", strs, strs)
}

输出

PS E:\go_study> go run .\main.go
str type string ,strs=20 
str type string ,strs=12.456000 
str type string ,strs=true      
str type string ,strs=a
PS E:\go_study> 

2> 使用 strconv 包里面的几种转换方法进行转换

package main

import (
	"fmt"
	// "strings"
	"strconv"
)

func main() {
	//1、int 转换成 string
	var num1 int = 20
	s1 := strconv.Itoa(num1)
	fmt.Printf("str type %T ,strs=%v \n", s1, s1)
	// 2、float 转 string
	var num2 float64 = 20.113123
	/* 参数
	1:要转换的值参数
	2:格式化类型
		'f'(-ddd.dddd)、
		'b'(-ddddp±ddd,指数为二进制)、
		'e'(-d.dddde±dd,十进制指数)、
		'E'(-d.ddddE±dd,十进制指数)、
		'g'(指数很大时用'e'格式,否则'f'格式)、
		'G'(指数很大时用'E'格式,否则'f'格式)。
	3: 保留的小数点 -1(不对小数点格式化)
	4:格式化的类型
	*/
	s2 := strconv.FormatFloat(num2, 'f', 2, 64)
	fmt.Printf("str type %T ,strs=%v \n", s2, s2)

	// 3、bool 转 string
	s3 := strconv.FormatBool(true)
	fmt.Printf("str type %T ,strs=%v \n", s3, s3)

	//4、int64 转 string
	var num3 int64 = 20 /*第二个参数为 进制 */
	s4 := strconv.FormatInt(num3, 10)
	fmt.Printf("类型 %T ,strs=%v \n", s4, s4)
}

输出

PS E:\go_study> go run .\main.go
str type string ,strs=20 
str type string ,strs=20.11 
str type string ,strs=true
类型 string ,strs=20
PS E:\go_study> 

3、String 类型转换成数值类型

1> string类型转换成int类型

package main

import (
	"fmt"
	// "strings"
	"strconv"
)

func main() {
	var s = "1234"
	i64, _ := strconv.ParseInt(s, 10, 64)
	fmt.Printf("值:%v 类型:%T", i64, i64)
}

输出

PS E:\go_study> go run .\main.go
值:1234 类型:int64
PS E:\go_study>

2> string 类型转换成 float 类型

package main

import (
	"fmt"
	// "strings"
	"strconv"
)

func main() {
	str := "3.1415926535"
	v1, _ := strconv.ParseFloat(str, 32)
	v2, _ := strconv.ParseFloat(str, 64)
	fmt.Printf("值:%v 类型:%T\n", v1, v1)
	fmt.Printf("值:%v 类型:%T", v2, v2)
}

输出

PS E:\go_study> go run .\main.go
值:3.1415927410125732 类型:float64
值:3.1415926535 类型:float64
PS E:\go_study>

3>string 转字符

package main

import (
	"fmt"
	// "strings"
	// "strconv"
)

func main() {
	s := "hello 张三"
	for _, r := range s {
		fmt.Printf("%v(%c) ", r, r)
	}
	fmt.Println()
}

输出

PS E:\go_study> go run .\main.go
104(h) 101(e) 108(l) 108(l) 111(o) 32( ) 24352() 19977() 
PS E:\go_study> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值