大家好,我是加摩斯,觉得文章有帮助的小伙伴,记得一键三连哟~
申明:本系列两天更新一篇,纯原创,转载前请与我沟通。
Go使用两种浮点型变量来存储小数,分别为float32和float64,其采用IEEE-754标准。
float32占用4个字节,其中1位表示符号,8位表示指数,23位表示尾数。小数部分能包含7位,精确6位。
float64占用8个字节,其中1位表示符号,11位表示指数,52位表示尾数。小数部分能包含16位,精确15位。
1. 表示方法
我们可以通过var p float64
来定义一个浮点型变量,浮点型的赋值可以分为下面两种方式:
p1 := .1415 // 相当于0.1415
p2 := 1. // 相当于1.0,小数点一定要加上,不然会被推导为整型
那么p2的类型是什么呢?go语言会将p2自动推导为float64类型,而不是float32类型,这一点需要注意。
浮点类型还可以通过科学计数法来表示很大或者很小的数,通过e
或者E
来指定指数部分,如:
const Planck = 6.62606957e-34 // 普朗克常数
浮点型打印通过使用%f
来格式化输出,且可以控制打印结果的小数点位数。
fmt.Printf("%f\n", math.Pi) // 打印所有小数
fmt.Printf("%.2f\n", math.Pi) // 保留两位小数
2. 数值比较
因为浮点数在计算机内部存储并不是精确的,比如0.3+0.6
的结果并不是0.9,而是趋近于0.9。这个可以去自行研究IEEE-754标准中关于浮点数存储的知识,本文基础部分不进行介绍。
func main() {
var p1 float64 = 0.3
var p2 float64 = 0.6
fmt.Println(p1+p2)
}
// 输出:0.8999999999999999
因为浮点类型有这样一个属性,那么对于两个浮点类型就不能直接使用==
来比较大小了,可能会产生错误的结果。一般是由我们自己定义一个精度,如果两个数差值在精度内,则认为两数相等。
func isEqual(p1, p2 float64){
if p1 - p2 < 0.000001{
return true
}
}
最后,优先使用float64类型,其精度更高。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)