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

GO学习日志06

1、浮点类型

Go语言中的浮点型用于表示带有小数部分的数字,遵循IEEE-754标准。主要分为两种类型:

  • float32:32位单精度浮点数,提供约6位十进制精度。
  • 单(双)精度浮点(32位/64位)
  • 指数位:8位(偏移量127)
  • 尾数位:23位(隐含前导1)
  • 实际范围:3.4e38(包括正负)
  • 常量定义:math.MaxFloat32
  • float64:64位双精度浮点数,提供约15位十进制精度,是默认的浮点类型。
  • 指数位:11位(偏移量1023)
  • 尾数位:52位(隐含前导1)
  • 实际范围:1.8e308(包括正负)
  • 常量定义:math.MaxFloat64
package main import "fmt" import "unsafe" func main(){ var a float32 = 3.14 fmt.Printf("值:%v---%f 类型:%T\n",a,a,a) //浮点数输出保留6位小数:值:3.14---3.140000 类型:float32 fmt.Println(unsafe.Sizeof(a)) //4字节32位 var b float64 = 13.14 fmt.Printf("值:%v---%f 类型:%T\n",b,b,b) //值:13.14---13.140000 类型:float64 fmt.Println(unsafe.Sizeof(b)) //8字节64位 }

float类型使用%f可以输出6位小数,如果指定小数位数可以使用%.2f

var c float64 = 3.1415926535 fmt.Printf("%.2f",c) //保留两位小数:3.14

float具体选择什么精度一般与你的操作系统相关,一般是64位默认float64

科学计数法是一种表示极大或极小数值的数学方法,通过将数字表示为基数(1 ≤ |a| < 10)与10的幂的乘积。其通用形式为:
[ a e n ] = a*10的n次方
其中:

  • ( a ) 是有效数字部分(包括小数);
  • ( n ) 为整数,表示10的指数。
f1 := 3.1415926535 fmt.Printf("%v---%f----%T",f1,f1,f1)//默认为float64:3.143.1415926535---3.141593----float64 f2 := 3.14e2 fmt.Printf("%v----%f---%T",f2,f2,f2) //科学计数法3.14*10的2次方:314----314.000000---float64
float精度丢失问题

浮点数在计算机中采用IEEE 754标准存储,本质上是以二进制科学计数法表示的近似值。Go语言中的float32float64类型同样遵循这一标准,导致以下常见问题:

  • 二进制无法精确表示某些十进制小数:例如0.1在二进制中是无限循环小数。
  • 运算过程中的累积误差:连续运算会放大初始误差。
  • 大数吃小数问题:当两个数数量级差异过大时,较小数的有效位可能丢失。
f1 := 8.2 f2 := 3.8 fmt.Println(f1-f2)//预期输出4.4,实际输出:4.3999999999999995 fmt.Println(f1 * 100)//输出:819.9999999999999

解决方法:推荐使用math/big包提供的Rat(有理数)类型或第三方库decimal:

import "math/big" a := big.NewRat(1, 10) // 表示0.1 b := big.NewRat(2, 10) // 表示0.2 sum := new(big.Rat).Add(a, b) // 精确得到0.3

或:github.com/shopspring/decimal

package main import "fmt" import "unsafe" import "github.com/shopspring/decimal" func main(){ f1 := 8.2 f2 := 3.8 fmt.Println(f1-f2)//预期输出4.4,实际输出:4.3999999999999995 fmt.Println(f1 * 100)//输出:819.9999999999999 n1 := decimal.NewFromFloat(f1).Add(decimal.NewFromFloat(f2)) fmt.Println(n1) }

注意float类型转换成int类型也会造成精度丢失(丢失小数部分)

package main import "fmt" func main(){ f1 := 8.2 f2 := 3.8 fmt.Println(f1-f2)//预期输出4.4,实际输出:4.3999999999999995 fmt.Println(f1 * 100)//输出:819.9999999999999 n1 := int(f2) fmt.Println(n1) //输出3 }

2、布尔类型

Go语言中的布尔值类型为bool,仅有两种取值:truefalse。布尔值常用于条件判断、循环控制等逻辑操作。

package main import "fmt" func main(){ var a bool = true fmt.Printf("%v---%T",a,a) //输出:true---bool //注意布尔类型的默认值是false,类似的string类型默认值是空,int和float默认值是0 //在c/c++中布尔类型可以转化成int类型:1或者0,但是在go不允许 /*b := 1 if b { //错误无法识别1 fmt.Println("true") }*/ c := true if c { fmt.Println("true") } }

注意:布尔类型无法参与数值运算也无法进行类型转换

布尔值的逻辑运算

Go语言支持三种基本逻辑运算符:

  • 逻辑与:&&(两个操作数均为true时结果为true
  • 逻辑或:||(任意一个操作数为true时结果为true
  • 逻辑非:!(对布尔值取反)
a, b := true, false fmt.Println(a && b) // 输出: false fmt.Println(a || b) // 输出: true fmt.Println(!a) // 输出: false

布尔值的比较运算

比较运算符(如==,!=,>,<等)会返回布尔值结果:

x, y := 10, 20 fmt.Println(x == y) // 输出: false fmt.Println(x < y) // 输出: true

布尔值的常见应用场景

  • 条件语句:if,switch等控制结构中作为判断条件
  • 循环控制:for循环的继续或终止条件
  • 函数返回值:表示操作成功/失败或状态标志
  • 结构体字段:标记对象的状态或属性
http://www.jsqmd.com/news/482915/

相关文章:

  • Linux文件误删急救指南:从debugfs到extundelete的实战恢复
  • Keil5开发环境配置Ostrakon-VL-8B通信模块:嵌入式AI网关实现
  • 企业级应用级FPGA MSHC Verilog完整SD卡模块IP源代码及DataBook资料提供
  • Langflow-ai OpenRAG实战:Java+Spring Boot搭建企业级私有知识库(从0到1)
  • 磁控U位系统:机房资产管理的精准高效解决方案
  • SIP代理与B2BUA的哲学之争:从技术架构看通信控制权的边界
  • Phi-3-vision-128k-instruct部署避坑指南:模型加载失败排查与log分析
  • 雪女-斗罗大陆-造相Z-Turbo开发环境搭建:Node.js后端服务集成教程
  • Qwen3-14B-Int4-AWQ辅助学术研究:文献综述与实验设计思路生成
  • Qwen3-14b_int4_awq生产环境部署实践:服务稳定性、并发压测与监控配置
  • TensorFlow-v2.9镜像实测:对比传统安装,效率提升不止一点点
  • 基于ESP32与ESP-ADF框架:三合一智能音箱(蓝牙/网络电台/AI对话)DIY全流程解析
  • SELU激活函数实战:如何用PyTorch实现自归一化神经网络(附代码示例)
  • 告别CUDA依赖:在PyCharm中配置PyTorch-DirectML,解锁AMD GPU的深度学习潜能
  • 咱们今天来聊聊双枪直流桩的硬核玩法。这玩意儿就像给电动车充电装了两把机关枪,能同时伺候两位“电动爹“,但背后可不是简单堆两个充电口就完事的
  • 其他模型导入略
  • ComfyUI可视化操作:Qwen-Image-Edit-2511图像编辑零代码实战
  • 原始火龙传奇起号攻略大全:战士专属苍炎大陆开局发育全攻略
  • 寻找可爱风格的头像素材,这份2026年备选站点清单可作参考
  • 华为H3C交换机日常运维:这20条高频命令能解决90%的故障排查
  • 奢牌斐登&剧版《万花世界》联合推封 ELLE女星销售额第一
  • 手机直播方案:DroidCam OBS插件实现无延迟推流全指南
  • Qwen3-14b_int4_awq镜像资源说明:含完整vLLM配置模板、Chainlit源码与调试工具链
  • Qwen3-0.6B-FP8实战:Java面试题智能解答系统
  • 好靶场---文件上传
  • PHP-GD库安装及验证码问题解决记录
  • 单细胞空间转录组数据可视化全攻略:从PNG图像到基因表达热图的Seurat技巧
  • translategemma-4b-it优化升级:批量处理100张图片的极简Python方案
  • OneAPI OpenAI GPT-4o接入:流式/非流式/JSON模式全功能验证
  • 容器化远程开发环境:code-server + SSH + Python 自启动配置