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 就可以满足大多数需求了。掌握了浮点数的表示特点后,我们可以更好地运用浮点数进行各种运算。


目录
相关文章
|
6天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
3天前
|
Go
go语言map、实现set
go语言map、实现set
10 0
|
3天前
|
Go
go语言数组与切片
go语言数组与切片
13 0
|
5天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
104 5
在go语言服务中封装路由和示例
|
2天前
|
Devops Go 云计算
Go语言发展现状:历史、应用、优势与挑战
Go语言发展现状:历史、应用、优势与挑战
|
3天前
|
Go
go语言的hello,world
go语言的hello,world
8 1
|
6天前
|
Unix Go 开发者
探索Go语言并发模型:原理与实践
本文深入探讨了Go语言的并发模型,包括其设计原理、Goroutine和Channel的基本使用,以及如何在实际项目中高效地应用这些概念来提高程序的性能和可维护性。
|
1天前
|
编译器 Go C++
必知的技术知识:go语言快速入门教程
必知的技术知识:go语言快速入门教程
|
2天前
|
编译器 Go 开发者
|
3天前
|
Java Go Windows
go语言实现加减法出题器(再也不用担心孩子学习了)
go语言实现加减法出题器(再也不用担心孩子学习了)
9 0