在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 %Tn",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.3fn",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