前言
Zam 寫過 c、c++、objective-c、js、java、swift、golang、prolog、python ,而 Zam 發現所有語言都會遇到的問題都差不多,其中一個一定就是在各種 Primitive type 間的進行轉換。所以用我認為簡單的方式介紹下 strconv
。也免得新手在學習時,都得逼著看英文或簡體。當然更詳細的請看 strconv package。
常用的指令與使用說明
最常用的字串/數字轉換(string to int and int to string)
Atoi
and Itoa
,基本上內部也是使用 ParseInt
and FormatInt
來進行轉換。這兩種轉換最常用到,Golang 為他特別做了兩個獨立的 func
。
基本上這兩種預設如下(詳細請繼續往後看)
Atoi = ParseInt(s, 10, 0) // default: base 10, type: intItoa = FormatInt(int64(i), 10) // default: base 10
使用範例
import { "strconv"
}func main() { i, err := strconv.Atoi("-18") // result: i = -18 s := strconv.Itoa(-18) // result: s = "-18"
}
當你看到這裡,其實應該就解決你的問題了,如果你對其他 type 或用法想更了解,可以繼續往下看
字串轉其他格式(Parse 系列)
Parse 比較值得講得是 float
, Int
, Uint
func ParseFloat(s string, bitSize int) (float64, error)
bitSize 可以有兩種選擇:32 跟 64
最需要注意的是,如果你使用了 bitSize 為 32
1. 最後輸出還是會是 64
2. 若未超出 32 範圍,轉換的值不會有變化;若超過 32 範圍,轉換的值超出部分會被亂數取代。因此超出的話,值會失真,與原來的不一樣。
func ParseInt(s string, base int, bitSize int) (int64, error)
base 為 0, 2 to 36。有趣的是,如果你直接設成 0,他會根據你的字串決定型態。例如:
0x777
會直接當成 16 進位,0777
為 8 進位,777
為 10 進位bitSize 為 0, 8, 16, 32, 64 分別對應至 int, int8, int16, int32, and int64
Uint
與 int
雷同,就不解釋了
使用範例
b, err := strconv.ParseBool("true") // result: true, boolf, err := strconv.ParseFloat("3.14", 64) // result: 3.14, float64i, err := strconv.ParseInt("-18", 10, 64) // result: -18, int64u, err := strconv.ParseUint("18", 10, 64) // result: 18, int64
其他格式轉字串(Format 系列)
Format 比較值得講得是 float
, Int
, Uint
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
fmt 主要有以下幾種模式,可以讓
float
顯示的更簡潔b: -ddddp±ddd, 二進制次方
e:-d.dddde±dd, 十進制次方
E: -d.ddddE±dd, 十進制次方
f :-ddd.dddd, 不顯示次方
g: 次方太大使用
e
,太小使用f
G: 次方太大使用
E
,太小使用f
prec 主要試用來限制 fmt 規範後的字數
func ParseInt(i int64, base int) string
base 範圍為 2 <= base <= 36。如果 base 超過 10,需要使用英文表示則使用小寫。詳細請看下面的範例
Uint
與 int
雷同,就不解釋了
使用範例
s := strconv.FormatBool(true) // result: "true"s := strconv.FormatFloat(3.14, 'E', -1, 64) // result: 3.14E+00s := strconv.FormatInt(-42, 16) // result: "-2a"s := strconv.FormatUint(42, 16) // result: "2a"
References
如果此篇你喜歡或覺得有幫助
可以幫 Zam 快速連點個鼓掌(claps) 或者 follow 哦
萬分感謝!