Go 语言浮点型 (小数类型)
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ; - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观
Go 语言中提供了两种精度浮点型 float32
和 float64
。这两种浮点型数据格式遵循 IEEE754 浮点数国际标准,该浮点数规范被所有现代的CPU支持。
浮点型 Float32
float32
,即我们常说的单精度,存储占用4个字节,也即4*8=32位,其中1位用来符号,8位用来指数,剩下的23位表示尾数:
浮点型 Float64
float64
, 即我们熟悉的双精度,存储占用8个字节,也即8*8=64位,其中1位用来符号,11位用来指数,剩下的52位表示尾数
浮点数精度
float32
的浮点数最大值约为 3.4e38, 可以通过 match
包的方法来获取: match.MaxFloat32
。
float64
的浮点数最大值约为 1.8e308, 可以通过 match
包的方法来获取: match.MaxFloat64
。
它们分别能表示的最小值近似为1.4e-45和4.9e-324。
一个float32类型的浮点数可以提供大约6个十进制数的精度,而float64则可以提供约15个十进制数的精度;通常应该优先使用float64类型,因为float32类型的累计计算误差很容易扩散,并且float32能精确表示的正整数并不是很大(注意:因为float32的有效bit位只有23个,其它的bit位用于指数和符号;当整数大于23bit能表达的范围时,float32的表示将出现误差):
var f float32 = 16777216 // 1 << 24
fmt.Println(f == f+1) // "true"!
浮点数的字面值可以直接写小数部分,如下所示:
const e = 2.71828
小数点前面或后面的数字都可能被省略(例如.707或1.)。很小或很大的数最好用科学计数法书写,通过e或E来指定指数部分:
const Avogadro = 6.02214129e23 // 阿伏伽德罗常数
const Planck = 6.62606957e-34 // 普朗克常数
打印浮点数
通过 Printf 函数打印浮点数时, 可以使用“%f”来控制保留几位小数, 代码如下:
package main
import (
"fmt"
"math"
)
func main() {
// 打印默认宽度和精度的圆周率, \n 为换行符
fmt.Printf("%f\n", math.Pi)
// 打印默认宽度, 精度(小数点后的位数)为2的圆周率
fmt.Printf("%.2f\n", math.Pi)
}
运行结果如下:
3.141593
3.14
图示: