在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
除非另有说明,否则本站上的内容根据以下许可进行许可: CC署名-非商业性使用-相同方式共享4.0国际许可协议4.0进行许可
本文作者:www.linuxea.com for Mark
文章链接:http://www.linuxea.com/2481.html (转载请注明本文出处和本章链接)