1. 程式人生 > GO語言入門 >15 Go 的強制型別轉換

15 Go 的強制型別轉換

Go 語言是一種強型別語言,而且沒有隱式轉換。也就是說運算子左右的變數型別必須一致,若不一致就會報錯。為了使使用者更加的容易使用,所以 Go 語言提供了各個型別之間強制型別轉換的內建方法。

1. 整型和浮點型互相轉換

整型浮點型變數之間的相互轉換相對容易,只需使用強制型別轉換標誌 type(variable)就好了。需要注意的是,當高精度低精度型別轉換的時候,會失真。即浮點型向整型轉換的時候會失去其小數部分。在實際開發的過程中,我們一般要避免這兩個型別的互相轉換,在無法避免的場景,比如說計算浮點數和整數的和之類的情況中。需要秉持不失真原則,將低精度向高精度轉換之後進行計算。

程式碼示例:

package
main import "fmt" func main(){ var a int = 10 // 宣告一個整形變數 a 並給 a 賦值為 10 var b float32 = 3.14 // 宣告一個浮點型變數 b 並給 b 賦值為 3.14 fmt.Printf("整型轉換為浮點型:%f\n",float32(a)) // 將變數 a 強制轉換為浮點型變數並列印結果 fmt.Printf("浮點型轉換為整型:%d\n",int(b)) //浮點型轉為整型會失真 }

執行結果如下:

圖片描述

整型和浮點型互相轉換例項輸出結果

2. 整形和字串互相轉換

整型和字串型別的變數互相轉換,需要依靠 Go 語言提供的轉換包strconv

。字串轉整型需要使用這個包的Atoi(string)方法,整型轉字串則是Itoa(int)。這種轉換用得最多的就是給一些物件進行編號。比如需要給張三編號為NO.1,你可能需要將1轉換為字串之後與NO.進行拼接。

程式碼示例:

package main

import (
    "fmt"
    "strconv" // 在程式中匯入 strconv 轉環包
)

func main() {
    var a int = 10 // 定義一個整形變數並賦值為 10
    var b string = "10" // 定義一個字串型別變數並賦值為 "10"

    fmt.Printf("整型轉換為字串:%s\n"
, strconv.Itoa(a)) tmp, _ := strconv.Atoi(b) fmt.Printf("字串轉換為整型:%d\n", tmp) }

執行結果如下:

圖片描述

整形和字串互相轉換例項輸出結果

3. 浮點型和字串互相轉換

浮點型和字串的互相轉換沒有直接封裝好的轉換介面了,需要呼叫strconvs包中稍微底層一點的介面。浮點型轉字串使用FormatFloat(float64,byte,int,int)方法,字串轉換為浮點型則使用ParseFloat(...)方法。因為浮點數在儲存過程中容易因為精度問題而存在誤差,所以有時候會將浮點數轉換為字串進行儲存。

程式碼示例:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    f1 := 0.123456789
    s1 := strconv.FormatFloat(f1, 'f', -1, 32)
    s2 := strconv.FormatFloat(f1, 'f', -1, 64)
    s3 := "0.123456789"
    f2, _ := strconv.ParseFloat(s3, 64)
    f3, _ := strconv.ParseFloat(s3, 32)
    fmt.Println("將浮點數轉換為float32轉換為string:", s2)
    fmt.Println("將float64轉換為string:", s1)
    fmt.Println("將string轉換為float64:", f2)
    fmt.Println("將string轉換為float32再強制轉換為float64:", f3)
}

執行結果:

圖片描述

浮點型和字串互相轉換例項輸出結果

4. 小結

本文主要學習了 Go 語言中各個資料型別的互相強制轉換。主要都是依賴與 strconvs 這個第三方包。這個包中還提供了其它很多的轉換方法,大家有機會可以更深入地去了解一下。在做型別轉換的時候要注意:浮點型在轉為整型時會失真。