Go语言浮点数完全手册 float32和float64一文掌握!

简介: Go语言浮点数完全手册 float32和float64一文掌握!

浮点数是一种可以表示小数的数字类型。在 Go 语言中,提供了两种浮点数类型:float32 和 float64。理解浮点数的表示范围和精度非常重要,这关系到我们选择合适的浮点类型。

本文将详细介绍 Go 语言中浮点数类型的表示范围、精度选择、初始化和使用等内容。

1

 

一、浮点数类型

Go 语言提供了两种浮点数类型:

  1. float32:32 位浮点数
  2. float64:64 位浮点数(默认的浮点数类型)

float32 占 4 个字节,float64 占 8 个字节。

2

 

二、float32 和 float64 的区别

float32 和 float64 的区别主要在于表示的最大范围以及精度不同:

  1. float32 表示范围约为 3.4e38,精度可达 7 位有效数字;
  2. 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 就可以满足大多数需求了。掌握了浮点数的表示特点后,我们可以更好地运用浮点数进行各种运算。


目录
相关文章
|
18天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
29 7
|
18天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
18天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
17天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
8天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
18天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
20天前
|
Go
go语言for遍历映射(map)
go语言for遍历映射(map)
30 12
|
19天前
|
Go 索引
go语言使用索引遍历
go语言使用索引遍历
27 9
|
19天前
|
Go 索引
go语言使用range关键字
go语言使用range关键字
25 7
|
19天前
|
Go 索引
go语言修改元素
go语言修改元素
26 6