go数据类型的转换
在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值。由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明:
B = B(A)
类型 B 的值 = 类型 B(类型 A 的值)
package main
import (
"fmt"
)
func main(){
var a float32 = 20.0
var b int = int(a)
fmt.Println(b)
}
类型转换只能在定义正确的情况下转换成功
例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将 int16 转换为 int32)。当从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。
package main
import (
"fmt"
)
func main(){
var a float64 = 20.000000009
var b float32 = float32(a)
fmt.Printf("%v",b)
}
结果精度丢失
只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误
package main
import (
"fmt"
)
func main(){
var a bool = true
var b int = int(a)
fmt.Printf("%v",b)
}
数据类型转其他
1.使用fmt.Sprintf()
package main
import "fmt"
func main(){
var new int = 50
var new1 string = fmt.Sprintf("%d",new)
fmt.Printf("new1对应的类型是:%T,new1的值是%v\n",new1,new1)
var new2 float64 = 6.48
var new3 bool = true
var new2s = fmt.Sprintf("%f",new2)
var new3s = fmt.Sprintf("%t",new3)
fmt.Printf("new2对应的类型是:%T,new2的值是%v\n",new2s,new2s)
fmt.Printf("new3对应的类型是:%T,new3的值是%v\n",new3s,new3s)
}
2.使用 strconv.FormatInt()与strconv.FormatFloat()
package main
import (
"fmt"
"strconv"
)
func main(){
var first int = 50
var first1 string = strconv.FormatInt(int64(first),10)
fmt.Printf("first1对应的类型是:%T,first1的值是%v\n",first1,first1)
var two float64 = 6.48
var two1 string = strconv.FormatFloat(two,'f',5,64)
fmt.Printf("two1对应的类型是:%T,two1的值是%v",two1,two1)
}