linuxea:go浮点数float类型简述(9)



在go中浮点有两种类型,一种是float64,一种是float32。一般使用float64即可

定义与赋值

默认是0值

package main
import "fmt"
func main(){
    var floatt float64
    fmt.Println(floatt)
}

运行

[root@LinuxEA /opt/Golang]# go run float.go 
0
  • 赋值
    var floatt float64
    floatt = 1.666
package main
import "fmt"
func main(){
    var floatt float64
    floatt = 1.666
    fmt.Printf("%T %f",floatt,floatt)
}

运行

[root@LinuxEA /opt/Golang]# go run float.go
float64 1.666000

字面量

字面量 也分为十进制表示法和科学技术表述法

  • 十进制表示法

如:1.666 ,2.666

floatt = 1.666
  • 科学技术表述法

如:

floatt = 12.02E1

这需要换算

算数运算

+,-,*,/,++,--。在float中通常不进行自增和自减,而且也不支持(%)余运算

fmt.Println(1.11 + 1.2)
fmt.Println(1.11 - 1.2)
fmt.Println(1.11 * 1.2)
fmt.Println(1.11 / 1.2)

运行结果

[root@LinuxEA /opt/Golang]# go run float.go
2.31
-0.09
1.332
0.925

与整数一样,被除数的不能为0

  • 自增和自减
floatt = 1.063
floatt++
fmt.Println(floatt)
floatt--
fmt.Println(floatt)

运行结果

[root@LinuxEA /opt/Golang]# go run float.go
2.0629999999999997
1.0629999999999997

!!! note

> 浮点数不是精确存储,在加减过程中会有一定的精度损耗。
> 如上述中的 1.063在运算后精度损耗会变大,打印时候是1.0629999999999997

关系运算

由于有精度损耗,对于浮点数来说,不计算等于和不等于。 一般来讲之计算大于>,大于等于>=,小于<,小于等于<=,或者约等于~=

fmt.Println(1.11 > 1.2)
fmt.Println(1.11 >= 1.2)
fmt.Println(1.11 < 1.2)
fmt.Println(1.11 <= 1.2)

运行结果

[root@LinuxEA /opt/Golang]# go run float.go
false
false
true
true
  • 等于判断

判断浮点数是否等于,可以先进行相减,而后在做比较区间值。如下:

最终的判断取决于精确到的位数

fmt.Println(1.11 - 1.2 <= 0.005)

运行结果

[root@LinuxEA /opt/Golang]# go run float.go
true

浮点数是没有位运算的,直接看赋值运算

赋值运算

等于=,加等于+=,减等于-=,乘等于*=,除等于/=

    floatt = 1.063
    floatt += 2.25
    fmt.Println(floatt)
    floatt -= 2.25
    fmt.Println(floatt)
    floatt *= 2
    fmt.Println(floatt)
    floatt /= 2
    fmt.Println(floatt)

运行结果

[root@LinuxEA /opt/Golang]# go run float.go
3.3129999999999997
1.0629999999999997
2.1259999999999994
1.0629999999999997

类型转换

我们知道,默认的是float64。现在转到float32。float32(zsh) 转换到float32

zsh := 1.16389366
fmt.Printf("%T %T\n",zsh,float32(zsh))
fmt.Println(zsh,float32(zsh))

运行

[root@LinuxEA /opt/Golang]# go run float.go
float64 float32
1.16389366 1.1638937

!!! Warning

>如果数据太大,转换后会进行截断

保留数

比如,现在我要保留五位,并且包含3个小数点-%5.3f。如下:

如果小数点和位数不满足,将用空格替代

fmt.Printf("%5.3f\n",zsh)

运行

[root@LinuxEA /opt/Golang]# go run float.go 
1.164

complex复数

Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部:

如果一个浮点数的字面量后面跟着一个i,例如2i,那么它将变成一个复数的虚部,这个复数的实部是0:

    ii := 1 + 2i
    fmt.Printf("%T %v",ii,ii)

运行

[root@marksugar /opt/Golang]# go run float.go 
complex128 (1+2i)

complex128是指实部和虚部都使用的是float64

0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-10-10分类: Golang

标签: Golang

发表评论