Golang的类型转换实战案例
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.数据类型概述
基础数据类型概述,博主推荐阅读: 布尔型: https://www.cnblogs.com/yinzhengjie2020/p/12246294.html 整型: https://www.cnblogs.com/yinzhengjie2020/p/12246804.html 浮点型: https://www.cnblogs.com/yinzhengjie2020/p/12247502.html 字符型: https://www.cnblogs.com/yinzhengjie2020/p/12250350.html 字符串型: https://www.cnblogs.com/yinzhengjie2020/p/12250787.html 高级/复合数据类型概述,博主推荐阅读:
温馨提示:
向上转型:
表示从较小的数据类型向较大的数据类型转换,比如将字节(byte)转换成int32,将int32转换成float64。
在Java中,如果一个byte类型和一个int类型进行算数运算的话,Java会默认对byte类型的变量进行隐式向上转型,即将byte对应的变量转换成int类型来进行计算哟~
但是,在Go语言中进行算数运算符操作时,要求元素的数据类型必须一致才能进行算数运算,且Go语言不会自动隐式向上转型,需要手动显式向上转型。
向下转型:
和向上转型相反,即从较大的数据类型向较小的数据类型转换,比如从float64类型转换成byte类型,就会出现高位截断的情况,也就是我们俗称的精度丢失。
无论是Java语言还是Go语言中想要向下转型就得显式转换。
二.数据类型转换案例实战
1>.向上转型案例
package main import ( "fmt" ) func main() { /* 疫情期间我家周围的物美超市大白菜的价格竟然涨到了2.75元人民币/500g,你们呢? */ Chinese_cabbage_price := 2.75 //自动推导浮点型默认是float64类型 weight := 5 //自动推导整形默认是int类型 fmt.Printf("Chinese_cabbage_price的类型为:[%T],Chinese_cabbage_price的值为:%.2f ", Chinese_cabbage_price, Chinese_cabbage_price) fmt.Printf("weight的类型为:[%T],weight的值为:%d ", weight, weight) /* 我们知道Chinese_cabbage_price的类型默认是float64类型,weight的类型默认是int类型。 Go语言和Java不同,Go语言不会进行隐式向上转换类型,无论是向上还是向下转型都需要手动执行。 综上所述,我们使用float64(weight)显式向上转型,即将weight的类型由int类型转换为float64类型,这样就可以进行算数运算符操作啦,计算结果如下所示。 */ Total_price := Chinese_cabbage_price * float64(weight) fmt.Printf("大白菜单价是%.2f元/500g,您购买了%d斤,总价为:[%.2f]元人名币 ", Chinese_cabbage_price, weight, Total_price) }
2>.向下转型案例
package main import ( "fmt" ) func main() { /* 疫情期间我家周围的物美超市大白菜的价格竟然涨到了2.75元人民币/500g,你们呢? */ Chinese_cabbage_price := 2.75 //自动推导浮点型默认是float64类型 weight := 5 //自动推导整形默认是int类型 fmt.Printf("Chinese_cabbage_price的类型为:[%T],Chinese_cabbage_price的值为:%.2f ", Chinese_cabbage_price, Chinese_cabbage_price) fmt.Printf("weight的类型为:[%T],weight的值为:%d ", weight, weight) /* 我们知道Chinese_cabbage_price的类型默认是float64类型,weight的类型默认是int类型。 Go语言和Java不同,Go语言不会进行隐式向上转换类型,无论是向上还是向下转型都需要手动执行。 综上所述,我们使用int(Chinese_cabbage_price)显式向下转型,即将Chinese_cabbage_price的类型由float64类型转换为int类型,这样可能会导致数据精度丢失,计算结果如下所示。 */ Total_price := int(Chinese_cabbage_price) * weight fmt.Printf("大白菜单价是%.2f元/500g,您购买了%d斤,总价为:[%.d]元人名币 ", Chinese_cabbage_price, weight, Total_price) }
3>.int和int相关类型在进行计算式需要进行类型转换
package main import "fmt" func main() { var a int = 10086 var b int64 = 10010 fmt.Printf("a的类型为%T,a的值为%d ", a, a) fmt.Printf("b的类型为%T,b的值为%d ", b, b) /* 注意运算符的优先级,会先执行加法算数运算符,在执行逗号运算符 int和int相关类型在进行计算式需要进行类型转换,如下所示。 */ fmt.Printf("a + b = %d ", int64(a)+b) }