当前位置: 首页 > ds >正文

Go语言--语法基础4--基本数据类型--浮点数类型

3 、浮点数类型
浮点型用于表示包含小数点的数据,比如 1.234 就是一个浮点型数据。
Go 语言中的浮点类型采用 IEEE-754 标准的表达方式。
float32 精度是小数点后 7
float64 精度是小数点后 15 位。
1. 浮点数表示
Go 语言定义了两个类型 float32 float64 ,其中 float32 等价于 C 语言的 float
类型,
float64 等价于 C 语言的 double 类型。
Go 语言里,定义一个浮点数变量的代码如下:
var fvalue1 float32
fvalue1 = 12
fvalue2 := 12.0 // 如果不加小数点, fvalue2 会被推导为整型而不是
浮点型
对于以上例子中类型被自动推导的 fvalue2 ,需要注意的是其类型将被自动
设为 float64
而不管赋给它的数字是否是用 32 位长度表示的。因此,对于以上的例子,
下面的赋值将导致编译错误:
fvalue1 = fvalue2
而必须使用这样的强制类型转换:
fvalue1 = float32(fvalue2)
2 、浮点数比较
1/3 2/3
因为浮点数不是一种精确的表达方式,所以像整型那样直接用 == 来判断
两个浮点数是否相等
是不可行的,这可能会导致不稳定的结果。下面是一种推荐的替代方案:
golang 中的高精度计算包 github.com/shopspring/decimal
go get github.com/shopspring/decimal
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main() {
v1 := decimal.NewFromFloat(0.0000000000012)
v2 := decimal.NewFromFloat(0.0000000000011)
fmt.Println(v1.Equal(v2))
}
执行结果:
false
或者:
package main
import "fmt"
import "math" // 数学库 Abs () 求绝对值函数 , Max() 求最大值函数
func main() {
aa:= 2.55
bb:= 1.23
// 比较 float64 大小 用到了库函数 和精度比较
if math.Max(aa, bb) == aa && math.Abs(aa-bb) > 0.000001 {
fmt.Println(aa,bb)
}
}
十进制下, float32 有效数字大约有 7 位, 3/3
float64 有效数字大约有 15 位,
说明:
1 )浮点数在机器中存在的形式:浮点数 = 符号位 + 指数位 + 尾数位(浮点数都
是有符号的)
2 )尾数部分可能丢失,造成精度损失;
3 )浮点型的存储分为三个部分:符号位 + 指数位 + 尾数位;
浮点型的使用细节:
1 golang 浮点类型有固定的范围和字段长度,不受操作系统的影响;
2 golang 默认为 float64 类别;
3 )浮点型常用两种形式表示:
1 )十进制: 5.12 0.512
2 )科学记数法形式: 5.1234E2 5.1234E-2
4 )通常使用 float64 ,它精度更高;
http://www.xdnf.cn/news/654.html

相关文章:

  • AWS EC2完全指南:如何快速搭建高性能云服务器?
  • A2A协议详解:打造统一的AI代理通信标准,实现多Agent系统协同
  • TDengine 性能监控与调优实战指南(一)
  • SQL注入 02
  • 【Part 2安卓原生360°VR播放器开发实战】第一节|通过传感器实现VR的3DOF效果
  • SpringBoot编写单元测试
  • libdxfrw库使用总结
  • 开源的 PDF 文件翻译软件
  • 借助 OpenCV 和 PyTorch 库,利用卷积神经网络提取图像边缘特征
  • 【源码+文档+调试讲解】扶贫助农系统
  • VSCode PIO使用Jlink SWD烧录Stm32
  • 【C++】初始化列表
  • 信息系统项目管理工程师备考计算类真题讲解五
  • Redis ④-通用命令
  • 解决Docker 配置 daemon.json文件后无法生效
  • 【数据可视化-19】智能手机用户行为可视化分析
  • Windows 环境下安装 MariaDB 及 HeidiSQL 使用教程
  • 玩机搞机基本常识-------小米OLED屏幕机型怎么设置为永不休眠_手机不息屏_保持亮屏功能 拒绝“烧屏” ?
  • 【Vim】vim的简单使用
  • 小迪第10天http/s数据包
  • JavaScript 一维数组转二维数组
  • 修改PointLIO项目
  • STM32配置系统时钟
  • 【PyTorch】训练时跟OOM相关的提示信息
  • AI大模型之模型幻觉
  • 【HarmonyOS 5】makeObserved接口详解
  • Java表达式1.0
  • 爱在冰川-慢就是快
  • IDEA在Git提交时添加.ignore忽略文件,解决为什么Git中有时候使用.gitignore也无法忽略一些文件
  • SpringAI系列 - MCP篇(一) - 什么是MCP