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()
}

猜你喜欢

转载自www.cnblogs.com/lz120792/p/9557402.html
今日推荐