浮点数是一种可以表示小数的数字类型。在 Go 语言中,提供了两种浮点数类型:float32 和 float64。理解浮点数的表示范围和精度非常重要,这关系到我们选择合适的浮点类型。
本文将详细介绍 Go 语言中浮点数类型的表示范围、精度选择、初始化和使用等内容。
1
一、浮点数类型
Go 语言提供了两种浮点数类型:
- float32:32 位浮点数
- float64:64 位浮点数(默认的浮点数类型)
float32 占 4 个字节,float64 占 8 个字节。
2
二、float32 和 float64 的区别
float32 和 float64 的区别主要在于表示的最大范围以及精度不同:
- float32 表示范围约为 3.4e38,精度可达 7 位有效数字;
- float64 表示范围约为 1.8e308,精度可达 15 位有效数字。
在大多数情况下我们应该使用 float64,因为它的精度更高。只有在需要节省内存空间的时候才使用 float32。
3
三、浮点数的机理
Go 语言的浮点数采用了 IEEE 754 标准的浮点数编码。该编码使用 1 个符号位、几个阶码位和尾数位来表示浮点数:
- 符号位表示正负;
- 阶码表示指数;
- 尾数表示有效数字。
举个例子:
5.12 = 1.101 * 2^(2)
- 1.101 就是尾数部分,也叫小数部分;
- 2 就是阶码,表示 2 个指数;
- 1 是符号位,正数为 0,负数为 1。
这样就能表示很大范围的浮点数了。
4
四、浮点数的范围
我们来看下 float32 和 float64 表示的最大最小范围:
- float32:大约 ±3.4e38
- float64:大约 ±1.8e308
再具体一点,float64 的范围是:
最大值:1.7976931348623157e+308
最小值:2.2250738585072014e-308
需要注意的是,超出该范围的浮点数会变成无穷大或无穷小。
5
五、浮点数的精度
float32 的精度为 7 位有效数字,float64 的精度为 15 位有效数字。
举个例子:
var a float32 = 1.123456789 var b float64 = 1.123456789 fmt.Println(a) // 1.1234568 fmt.Println(b) // 1.123456789
可以看到 float64 能保留更多的精度。
6
六、浮点数的初始化
初始化浮点数可以通过 float32()和 float64()函数来显式指定类型:
var a float32 = float32(3.14) var b float64 = float64(3.141592653)
不指定时,默认声明 float64 类型:
var c = 3.14 // float64类型
7
七、示例代码
下面我们看一个浮点数运算的简单示例:
package main import "fmt" func main() { var price float64 = 89.12 var discount float64 = 0.5 var result float64 result = price * discount fmt.Println("支付金额:",result) }
输出结果:
支付金额: 44.56
通过这个例子可以看出 Go 语言可以很方便地进行浮点数的运算。
8
总结
Go 语言作为一门高性能编程语言,提供了可选择的 float32 和 float64 两种浮点数类型。我们应该根据实际的精度需求选择合适的浮点类型,一般默认使用 float64 就可以满足大多数需求了。掌握了浮点数的表示特点后,我们可以更好地运用浮点数进行各种运算。