go基础语法-内置变量类型
1.内建变量一览
- bool,string
- (u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr
无长度int的实际长度取决于操作系统位数(32/64)
uintptr为指针类型 - byte,rune
rune相当于其他语言的char,长度为int4(32位) - float32,float32,complex64,complex128
complex为复数(1+1i)
2.强制类型转换
golang有严格的类型匹配,不同的类型之间通常需要手动转换(interface类型除外,以后详细讲解),编译器不会进行自动转换
3.浮点数进度
浮点数运算会丢失精度,解决方法很多,在测试代码中提供了一种,思路为:如果要保留m位小数,对m + 1位加0.5后四舍五入
测试代码
package main
import (
"fmt"
"math"
"math/cmplx"
)
/*
测试复数,勾股定理
*/
func complexTest() {
c := 5 + 12i
fmt.Println(cmplx.Abs(c))
}
/*
欧拉公式
*/
func euler() {
fmt.Printf("%.1f\n", //浮点运算会丢失精度,这里只保留一位小数,也可保留多位
cmplx.Exp(1i*math.Pi)+1)
}
/*
精度损失的解决方案,sou : 浮点数,m : 要保留的位数
*/
func preciseGuarantee(sou float64, m int) {
n := math.Pow10(m) //n = 10的m次方
fmt.Println(math.Trunc((sou+0.5/n)*n) / n)
}
/*
强制类型转换
*/
func triangle(){
a,b,c := 3,4,0
c=int( //c为int型,math.Sqrt返回值类型为float64,需要强转,不能自动转换
math.Sqrt(float64(a*a+b*b))) //math.Sqrt参数类型为float64
fmt.Println(c)
}
func main() {
complexTest()
euler()
preciseGuarantee(3.141592653589793, 10)
triangle()
}