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()
}
posted @ 2018-08-29 23:07  遥望1992  阅读(267)  评论(0编辑  收藏  举报