Go 语言的强制类型转换
Go 语言是一种强类型语言,而且没有隐式转换。也就是说运算符左右的变量类型必须一致,若不一致就会报错。为了使用户更加的容易使用,所以 Go 语言提供了各个类型之间强制类型转换的内置方法。
1. 整型和浮点型互相转换
整型和浮点型变量之间的相互转换相对容易,只需使用强制类型转换标志 type(variable)
就好了。需要注意的是,当高精度向低精度类型转换的时候,会失真。即浮点型向整型转换的时候会失去其小数部分。在实际开发的过程中,我们一般要避免这两个类型的互相转换,在无法避免的场景,比如说计算浮点数和整数的和之类的情况中。需要秉持不失真原则,将低精度向高精度转换之后进行计算。
代码示例:
- 1
package main
- 2
- 3
import "fmt"
- 4
- 5
func main(){
- 6
var a int = 10 // 声明一个整形变量 a 并给 a 赋值为 10
- 7
var b float32 = 3.14 // 声明一个浮点型变量 b 并给 b 赋值为 3.14
- 8
- 9
fmt.Printf("整型转换为浮点型:%fn",float32(a)) // 将变量 a 强制转换为浮点型变量并打印结果
- 10
fmt.Printf("浮点型转换为整型:%dn",int(b)) //浮点型转为整型会失真
- 11
}
执行结果如下:
2. 整形和字符串互相转换
整型和字符串类型的变量互相转换,需要依靠 Go 语言提供的转换包strconv
。字符串转整型需要使用这个包的Atoi(string)
方法,整型转字符串则是Itoa(int)
。这种转换用得最多的就是给一些对象进行编号。比如需要给张三编号为NO.1,你可能需要将1转换为字符串之后与NO.进行拼接。
代码示例:
- 1
package main
- 2
- 3
import (
- 4
"fmt"
- 5
"strconv" // 在程序中导入 strconv 转环包
- 6
)
- 7
- 8
func main() {
- 9
var a int = 10 // 定义一个整形变量并赋值为 10
- 10
var b string = "10" // 定义一个字符串类型变量并赋值为 "10"
- 11
- 12
fmt.Printf("整型转换为字符串:%sn", strconv.Itoa(a))
- 13
tmp, _ := strconv.Atoi(b)
- 14
fmt.Printf("字符串转换为整型:%dn", tmp)
- 15
}
执行结果如下:
3. 浮点型和字符串互相转换
浮点型和字符串的互相转换没有直接封装好的转换接口了,需要调用strconvs
包中稍微底层一点的接口。浮点型转字符串使用FormatFloat(float64,byte,int,int)
方法,字符串转换为浮点型则使用ParseFloat(...)
方法。因为浮点数在存储过程中容易因为精度问题而存在误差,所以有时候会将浮点数转换为字符串进行存储。
代码示例:
- 1
package main
- 2
import (
- 3
"fmt"
- 4
"strconv"
- 5
)
- 6
- 7
- 8
func main() {
- 9
f1 := 0.123456789
- 10
s1 := strconv.FormatFloat(f1, 'f', -1, 32)
- 11
s2 := strconv.FormatFloat(f1, 'f', -1, 64)
- 12
s3 := "0.123456789"
- 13
f2, _ := strconv.ParseFloat(s3, 64)
- 14
f3, _ := strconv.ParseFloat(s3, 32)
- 15
fmt.Println("将浮点数转换为float32转换为string:", s2)
- 16
fmt.Println("将float64转换为string:", s1)
- 17
fmt.Println("将string转换为float64:", f2)
- 18
fmt.Println("将string转换为float32再强制转换为float64:", f3)
- 19
}
执行结果:
4. 小结
本文主要学习了 Go 语言中各个数据类型的互相强制转换。主要都是依赖与 strconvs
这个第三方包。这个包中还提供了其它很多的转换方法,大家有机会可以更深入地去了解一下。在做类型转换的时候要注意:浮点型在转为整型时会失真。
文章来源于网络,侵删!