码迷,mamicode.com
首页 > 其他好文 > 详细

go基础语法-内置变量类型

时间:2018-08-30 02:01:49      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:bool   长度   ace   参数类型   abs   公式   指针类型   详细   手动   

内建变量类型

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

go基础语法-内置变量类型

标签:bool   长度   ace   参数类型   abs   公式   指针类型   详细   手动   

原文地址:https://www.cnblogs.com/lz120792/p/9557402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!