Go语言--语法基础4--基本数据类型--浮点数类型

3 、浮点数类型
浮点型用于表示包含小数点的数据,比如 1.234 就是一个浮点型数据。
Go 语言中的浮点类型采用 IEEE-754 标准的表达方式。
float32 精度是小数点后 7
float64 精度是小数点后 15 位。
1. 浮点数表示
Go 语言定义了两个类型 float32 float64 ,其中 float32 等价于 C 语言的 float
类型,
float64 等价于 C 语言的 double 类型。
Go 语言里,定义一个浮点数变量的代码如下:
var fvalue1 float32
fvalue1 = 12
fvalue2 := 12.0 // 如果不加小数点, fvalue2 会被推导为整型而不是
浮点型
对于以上例子中类型被自动推导的 fvalue2 ,需要注意的是其类型将被自动
设为 float64
而不管赋给它的数字是否是用 32 位长度表示的。因此,对于以上的例子,
下面的赋值将导致编译错误:
fvalue1 = fvalue2
而必须使用这样的强制类型转换:
fvalue1 = float32(fvalue2)
2 、浮点数比较
1/3 2/3
因为浮点数不是一种精确的表达方式,所以像整型那样直接用 == 来判断
两个浮点数是否相等
是不可行的,这可能会导致不稳定的结果。下面是一种推荐的替代方案:
golang 中的高精度计算包 github.com/shopspring/decimal
go get github.com/shopspring/decimal
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main() {
v1 := decimal.NewFromFloat(0.0000000000012)
v2 := decimal.NewFromFloat(0.0000000000011)
fmt.Println(v1.Equal(v2))
}
执行结果:
false
或者:
package main
import "fmt"
import "math" // 数学库 Abs () 求绝对值函数 , Max() 求最大值函数
func main() {
aa:= 2.55
bb:= 1.23
// 比较 float64 大小 用到了库函数 和精度比较
if math.Max(aa, bb) == aa && math.Abs(aa-bb) > 0.000001 {
fmt.Println(aa,bb)
}
}
十进制下, float32 有效数字大约有 7 位, 3/3
float64 有效数字大约有 15 位,
说明:
1 )浮点数在机器中存在的形式:浮点数 = 符号位 + 指数位 + 尾数位(浮点数都
是有符号的)
2 )尾数部分可能丢失,造成精度损失;
3 )浮点型的存储分为三个部分:符号位 + 指数位 + 尾数位;
浮点型的使用细节:
1 golang 浮点类型有固定的范围和字段长度,不受操作系统的影响;
2 golang 默认为 float64 类别;
3 )浮点型常用两种形式表示:
1 )十进制: 5.12 0.512
2 )科学记数法形式: 5.1234E2 5.1234E-2
4 )通常使用 float64 ,它精度更高;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值