3.2数据类型转换

需要引入包 strconv

1、字符串转整数

string 转 int

  1. int,err:=strconv.Atoi(string)

string 转int64

  1. int64, err := strconv.ParseInt(string, 10, 64)

10代表10进制,可以设置2 进制到 36 进制

64代表int64,可以指定整数类型(0:int、8:int8、16:int16、32:int32、64:int64)

示例:

  1. int64, err := strconv.ParseInt("100", 2, 64)
  2. if err != nil {
  3. fmt.Println(err)
  4. }
  5. fmt.Println(int64)
  6. 结果:
  7. 4

2、字符串转浮点型

string转float32

  1. float32,err := strconv.ParseFloat(string,32)

string转float64

  1. float64,err := strconv.ParseFloat(string,64)

string 是合法的格式,而且接近一个浮点值,如果不是合法的格式,则返回“语法错误” // 如果转换结果超出 bitSize 范围,则返回“超出范围”

返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)

3、浮点型转字符串

示例:

  1. f := 100.12345678901234567890123456789
  2. fmt.Println(strconv.FormatFloat(f, 'b', 5, 32)) // 13123382p-17
  3. fmt.Println(strconv.FormatFloat(f, 'e', 5, 32)) // 1.00123e+02
  4. fmt.Println(strconv.FormatFloat(f, 'E', 5, 32)) // 1.00123E+02
  5. fmt.Println(strconv.FormatFloat(f, 'f', 5, 32)) // 100.12346
  6. fmt.Println(strconv.FormatFloat(f, 'g', 5, 32)) // 100.12
  7. fmt.Println(strconv.FormatFloat(f, 'G', 5, 32)) // 100.12
  8. fmt.Println(strconv.FormatFloat(f, 'b', 30, 32)) // 13123382p-17
  9. fmt.Println(strconv.FormatFloat(f, 'e', 30, 32)) // 1.001234588623046875000000000000e+02
  10. fmt.Println(strconv.FormatFloat(f, 'E', 30, 32)) // 1.001234588623046875000000000000E+02
  11. fmt.Println(strconv.FormatFloat(f, 'f', 30, 32)) // 100.123458862304687500000000000000
  12. fmt.Println(strconv.FormatFloat(f, 'g', 30, 32)) // 100.1234588623046875
  13. fmt.Println(strconv.FormatFloat(f, 'G', 30, 32)) // 100.1234588623046875
  14. fmt.Println(strconv.FormatFloat(f, 'f', -1, 32)) //100.12346
  15. fmt.Println(strconv.FormatFloat(f, 'f', -1, 64))//100.12345678901235
  16. f2 := 0.12345678901234567890123456789
  17. fmt.Println(strconv.FormatFloat(f2, 'f', -1, 32)) //0.12345679
  18. fmt.Println(strconv.FormatFloat(f2, 'f', -1, 64)) //0.12345678901234568
  1. 第二个参数:
  2. 'b' (-ddddp±ddd,二进制指数)
  3. 'e' (-d.dddde±dd,十进制指数)
  4. 'E' (-d.ddddE±dd,十进制指数)
  5. 'f' (-ddd.dddd,没有指数)
  6. 'g' ('e':大指数,'f':其它情况)
  7. 'G' ('E':大指数,'f':其它情况)
  8. 如果格式标记为 'e''E''f',则 prec 表示小数点后的数字位数
  9. 如果格式标记为 'g''G',则 prec 表示总的数字位数(整数部分+小数部分)
  10. 第三个参数:
  11. -1 代表输出的精度小数点后的位数,如果是<0的值,则返回最少的位数来表示该数,如果是大于0的则返回对应位数的值
  12. 第四个参数:
  13. 32表示float32位,如果64代表float64, 精确到小数点后 7 位,float64 精确到小数点后 15 位.

4、浮点转整型

  1. var i float32
  2. var j float64
  3. i=1.5
  4. j=1.5
  5. fmt.Println(int(i)) // 1
  6. fmt.Println(int64(i)) // 1
  7. fmt.Println(int32(i)) // 1
  8. fmt.Println(int(j)) // 1
  9. fmt.Println(int64(j)) // 1
  10. fmt.Println(int32(j)) // 1

5、整数型转字符型

int 转string

  1. string:=strconv.Itoa(int)

Int64转string

  1. string := strconv.FormatInt(int64,10)
  1. i := int64(-2048)
  2. fmt.Println(strconv.FormatInt(i, 2)) // -100000000000
  3. fmt.Println(strconv.FormatInt(i, 8)) // -4000
  4. fmt.Println(strconv.FormatInt(i, 10)) // -2048
  5. fmt.Println(strconv.FormatInt(i, 16)) // -800
  6. fmt.Println(strconv.FormatInt(i, 36)) // -1kw

第二个参数为进制(2 进制到 36 进制),大于 10 进制的数,返回值使用小写字母 ‘a’ 到 ‘z’func

uint转string

  1. i := uint64(2048)
  2. fmt.Println(strconv.FormatUint(i, 2)) // 100000000000
  3. fmt.Println(strconv.FormatUint(i, 8)) // 4000
  4. fmt.Println(strconv.FormatUint(i, 10)) // 2048
  5. fmt.Println(strconv.FormatUint(i, 16)) // 800
  6. fmt.Println(strconv.FormatUint(i, 36)) // 1kw

第二个参数为进制(2 进制到 36 进制),大于 10 进制的数,返回值使用小写字母 ‘a’ 到 ‘z’func

6、[]byte和string相互转换

  1. s := "hello"
  2. data := []byte(s)
  3. fmt.Println(data)
  4. s = string(data[:])
  5. fmt.Println(s)

7、string转bool

  1. fmt.Println(strconv.ParseBool("1")) // true
  2. fmt.Println(strconv.ParseBool("t")) // true
  3. fmt.Println(strconv.ParseBool("T")) // true
  4. fmt.Println(strconv.ParseBool("true")) // true
  5. fmt.Println(strconv.ParseBool("True")) // true
  6. fmt.Println(strconv.ParseBool("TRUE")) // true
  7. fmt.Println(strconv.ParseBool("TRue")) // false strconv.ParseBool: parsing "TRue": invalid syntax
  8. fmt.Println(strconv.ParseBool("0")) // false
  9. fmt.Println(strconv.ParseBool("f")) // false
  10. fmt.Println(strconv.ParseBool("F")) // false
  11. fmt.Println(strconv.ParseBool("false")) // false
  12. fmt.Println(strconv.ParseBool("False")) // false
  13. fmt.Println(strconv.ParseBool("FALSE")) // false
  14. fmt.Println(strconv.ParseBool("FALse")) // false strconv.ParseBool: parsing "FAlse": invalid syntax

8、bool转string

  1. fmt.Println(strconv.FormatBool(0 < 1)) // true
  2. fmt.Println(strconv.FormatBool(0 > 1)) // false

小结:

  • intuint 在 32 位操作系统上,它们均使用 32 位(4 个字节),在 64 位操作系统上,它们均使用 64 位(8 个字节)。
  • uintptr 的长度被设定为足够存放一个指针即可。
  • int、int8 、int16、int32、int64之间转换通过 int()、int8() 、int16()、int32()、int64()

参考:

https://studygolang.com/articles/4577

links