作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
1.浮点数概述
浮点数就是用于存储包含小数值的,比如: 3.14,9.18等等。
Go语言支持两种浮点型数:float32和float64。这两种浮点型数据格式遵循IEEE 754标准:
float32的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32,占用4字节。
float64的浮点数的最大范围约为1.8e308,可以使用一个常量定义:math.MaxFloat64,占用8字节。
浮点数底层存储和操作系统无关,浮点类型底层存储: 符号位+指数位+尾数位,所以尾数位只是存了一个大概,很可能会出现精度的损失。
众所周知,浮点数的计算是不精确的(比如python的0.1+0.2),因此在做金融计算的场景我们常用的两种解决方案为:
(1)将计算的数值转换成字符串进行计算;
(2)将计算的数值转换成整数进行计算,比如计算前先将数字放大指定的倍数,计算完毕后再缩小相应的倍数;
2.参考案例
package main
import (
"fmt"
"math"
)
func main() {
var (
// 定义浮点类型的数据,可以表示正浮点数,也可以表示负的浮点数
a float32 = 3.1415926
b float32 = -3.1415926
// 浮点数可以使用十进制表示形式,也可以使用科学记数法表示,E大小写都可以哟~
c float32 = 314e-2
d float32 = 3.14E+3
// 浮点数可能会有精度的损失,所以通常情况下,建议使用float64
e float32 = 249.0000093
f float64 = 249.0000093
// Golang中默认的浮点类型为: float64
g = 9.9
)
fmt.Printf("a=%f\nb=%f\nc=%f\nd=%f\ne=%f\nf=%f\ng=%f,g的类型为:%T\n", a, b, c, d, e,f,g,g)
// 浮点数字面量语法
fmt.Printf("%f\n", math.Pi) // 打印浮点数时,可以使用fmt包配合动词%f
fmt.Printf("%.2f\n", math.Pi)
}