Golang的类型转换实战案例

          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\n", Chinese_cabbage_price, Chinese_cabbage_price)
    fmt.Printf("weight的类型为:[%T],weight的值为:%d\n", 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]元人名币\n", 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\n", Chinese_cabbage_price, Chinese_cabbage_price)
    fmt.Printf("weight的类型为:[%T],weight的值为:%d\n", 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]元人名币\n", 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\n", a, a)
    fmt.Printf("b的类型为%T,b的值为%d\n", b, b)

    /*
        注意运算符的优先级,会先执行加法算数运算符,在执行逗号运算符

        int和int相关类型在进行计算式需要进行类型转换,如下所示。
    */
    fmt.Printf("a + b = %d\n", int64(a)+b)
}

 

posted @ 2020-02-10 06:36  JasonYin2020  阅读(663)  评论(0编辑  收藏  举报