go语言中基本数据类型的转换:int和float之间的转换,字符串与小数整数之间的转换

int类型:不同类型不能够相加

复制代码
package main
import (
	"fmt"
)
// 入口函数
func main()  {
	var num1 int8 = 10
	var num2 int16 = 20
	// 相加会报错
	// tempCodeRunnerFile.go:10:6: expected 'package', found 'EOF'
	fmt.Println(num1 + num2)
}

解决办法:转换为相同的类型

复制代码
package main
import (
	"fmt"
)
// 入口函数
func main()  {
	var num1 int8 = 10
	var num2 int16 = 20
	// 转化为相同的类型就可以相加了
	fmt.Println(int16(num1) + num2)
	fmt.Println(num1 + int8(num2))
}

int和float类型之间的转换

复制代码
package main
import (
	"fmt"
)
// 入口函数
func main()  {
	var num1 int8 = 10
	var num2 float32 = 20.12
	// 将int8转换为float32类型;他们类型一样后,再相加
	fmt.Println(float32(num1) + num2)
}

转换的注意点

注意:转换的时候建议从低位转换成高位(int8 -> int16 -> float32 -> float64)

高位转换成低位的时候如果转换不成功就会溢出,出现精度丢失的问题

其他类型转化为string 类型:fmt.Sprintf("%d",num1)

复制代码
package main
import (
	"fmt"
)
// 入口函数
func main()  {
	var num1 int8 = 10
	// 将数字转化为字符串(整数类型)
	str1 := fmt.Sprintf("%d",num1)
	fmt.Printf("值:%v,类型:%T", str1, str1)
}

%d

在Go语言的fmt包中,%d 是一个格式占位符,它的含义是:

将整数类型(int、int8、int16、uint 等)格式化为十进制(基数为 10)的数字字符串。

因此可以用它来将整数转化为字符串

浮点数转换为字符串

复制代码
package main
import ("fmt")
// 入口函数
func main()  {
	var num  = 30.345
  var str2  = fmt.Sprintf("%f", num)
  fmt.Printf("值:%v, 类型:%T", str2, str2) 
  // 输出 值:30.345000, 类型:string
}

转化为字符串如何保留2,3位小数

为啥现在是30.345000,而不是 30.345

布尔类型转换为字符串

复制代码
package main
import ("fmt")
// 入口函数
func main()  {
	var flag = true
  var str2  = fmt.Sprintf("%t", flag)
  fmt.Printf("值:%v, 类型:%T", str2, str2) 
  // 输出: 值:true, 类型:string
}

字符转化为字符串

复制代码
package main
import ("fmt")
// 入口函数
func main()  {
	var charByte = 'a'
  var str2  = fmt.Sprintf("%c", charByte)
  fmt.Printf("值:%v, 类型:%T", str2, str2) 
  // 值:a, 类型:string
}

通过包进行转换: 数字转换位字符串

strconv.FormatInt(被转化的数字,这个数字是多少位的)

被转化的数字:要求是int64的,如果不是我们手动转换为int64

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
	var num int = 200
  var str2  = strconv.FormatInt(int64(num), 10)
  fmt.Printf("值:%v, 类型:%T", str2, str2)
  // 值:20.59, 类型:string
}

浮点类型转换为字符串

func FormatFloat(float64, fmt byte, prec int, bitSize int) string

float64含义:你要转换的那个浮点数,必须是 float64 类型.

fmt (byte) ------ 格式标记(决定长什么样);

'f' 十进制小数(最常用)

'e' 科学计数法(小写 e)

'E' 科学计数法(大写 E)

'b' 二进制指数(极少用,用于调试)

prec (int) ------ 精度控制(管几位数)

例:prec = 2 → 保留两位小数。

例:prec = -1 → 去掉末尾多余的 0(显示最简形式)

bitSize (int) ------ 原始精度标识(填 32 或 64)

含义:告诉函数,你原来的浮点数是用 float32 还是 float64 定义的

优先填写64

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
	var num  = 20.589
	// num 这个数字本身就是浮点类型,因此不需要再转换了。 f以十进制。 2表示保留2位小数,原来是64位。
	var str2 = strconv.FormatFloat(num, 'f', 2, 64)
	fmt.Printf("值:%v, 类型:%T", str2, str2)
	//  值:20.59, 类型:string
}

布尔类型转换为字符串类型

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
	var flag  = true
  // 布尔类型转换位字符串类型
  var str2  = strconv.FormatBool(flag)
  fmt.Printf("值:%v, 类型:%T", str2, str2)
  // 值:true, 类型:string
}

把字符串转换为整数类型

strconv.ParseInt(a, 10, 64)

参数a:需要转换的字符串

参数10:转换为10进制

参数64:转换为整数64位数还是多少位数;有64 32

它的返回值使用2个变量来接收,因为有可能来处理错误:

再次说明:必须用两个变量接收

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
  str  := "1246"
  // 把字符串转换为整数类型, _表示匿名变量,我们现在暂时不需要打印输出它
  num, _ := strconv.ParseInt(str, 10, 64)

  fmt.Printf("值:%v, 类型:%T", num, num)
}

把字符串转换为浮点类型

strconv.ParseFloat(a, 64)

参数a:需要转换的字符串

参数64:转换为浮点类型是64位数;

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
  str := "1246.456"
  // 把字符串转换为浮点类型, _表示匿名变量,我们现在暂时不需要打印输出它
  num, _ := strconv.ParseFloat(str, 64)
  fmt.Printf("值:%v, 类型:%T", num, num)
}

数值类型没法和bool 类型进行转换

注意:在go语言中,数值类型没法直接转换成bool类型 bool类型也没法直接转换成数值类型。

不建议把string类型转换为bool类型,意义不大

复制代码
package main
import ("fmt")
import ("strconv")
// 入口函数
func main()  {
	var str  = "xxxx"
  boolValue, _ := strconv.ParseBool(str)
  fmt.Printf("值:%v, 类型:%T", boolValue, boolValue)
  //  值:false, 类型:bool
}