- Go 语言没有隐式类型转换,类型转换都是显示的强制转换。明明白白写清楚需要转换的类型。
- 强制类型转换只能在两个类型之间相互支持的情况下才能使用。如数字类型的 int 和 float。
- float 浮点数转换为 int 整形会出现精度丢失现象,只取整数位,丢弃小数位。
package main
import "fmt"
func main() {
n1 := 10 // n1 int 类型
f1 := 1.99 // f1 float 浮点型
fmt.Printf("n1:%T\n", n1) // Printf(%T) 查看变量的值类型
fmt.Printf("f1:%T", f1)
}
//输出结果:
PS C:\Users\86186\go\src\chapter2\2.7> go run .\main.go
n1:int // n1 int 整数型
f1:float64 // f1 float 浮点型
------------------------------------ 分割线 ----------------------------------
// 接上面不转换类型的基础上,ni、f1 参与运算会报错。
package main
import "fmt"
func main() {
n1 := 10
f1 := 1.99
fmt.Println(n1 + f1) // int 类型 n1 和 float 浮点型 f1 相加
}
//输出结果:
PS C:\Users\86186\go\src\chapter2\2.7> go run .\main.go
# command-line-arguments
.\main.go:8:17: invalid operation: n1 + f1 (mismatched types int and float64)
// 系统提示:int和 float64类型不匹配
- 如果想两个不同类型数值进行运算,就需要强制类型转换。
- 方法一:int 强转为 float
package main
import "fmt"
func main() {
n1 := 10
f1 := 1.99
fmt.Println(float64(n1) + f1) // float64(int),把 int 类型强转为 float64
// 此时,n1 和 f1 一样都是 float64 可以参与运算。
}
//输出结果:
PS C:\Users\86186\go\src\chapter2\2.7> go run .\main.go
11.99 // 10+1.99=11.99,没问题。
package main
import "fmt"
func main() {
n1 := 10
f1 := 1.99
fmt.Println(n1 + int(f1)) // int(float64),把 float64类型强转为 int
// 此时,n1 和 f1 一样都是 int 可以参与运算。
}
//输出结果:
PS C:\Users\86186\go\src\chapter2\2.7> go run .\main.go
11 // 10+1.99=11.99,但出来的结果是11。
//这是因为 float 浮点数转换为 int 整形会出现精度丢失现象,
//只取整数位,丢弃小数位。所有,11.99 只取整数位 11 。
网友评论