go 的 `uint64` 类型无法精确表示超过 2^64−1 的整数,而 19 位十进制数(如 10736581604118680000)在转换为 `uint64` 时会因浮点近似或截断导致低 4 位偏差;应使用 `math/big.int` 或确保输入为精确字符串而非浮点近似值。
在物联网设备对接 1-Wire iButton 等硬件时,常需将厂商刻印的十六进制 ID(如 000015877CD0)与设备读取的十进制数值进行双向验证。但当十进制数达到 19 位(如 10736581604118680000)时,直接赋值给 Go 的 uint64 变量会引发静默精度丢失——这不是 Go 的 Bug,而是底层数值表示的必然限制。
根本原因在于:
✅ 正确做法:绕过 float64 和 uint64 的中间表示,全程使用精确整数运算。
package main
import (
"fmt"
"math/big"
"strconv"
)
func main() {
// ✅ 正确:从十六进制字符串直接解析(无精度损失)
hexStr := "95000015877CD001" // 厂商刻印完整值
bigInt := new(big.Int)
if _, ok := bigInt.SetString(hexStr, 16); !ok {
panic("invalid hex string")
}
// 提取中间 12 位(跳过前 2 字节 + 后 2 字节)
resultHex := fmt.Sprintf("%016X", bigInt)[2:14]
fmt.Println("Extracted ID:", resultHex) // 输出:000015877CD0
// ✅ 或从十进制字符串安全解析(若必须用 dec 输入)
decStr := "10736581604118679553" // 注意:这是精确整数,非 80000 结尾的近似值
if _, ok := bigInt.SetString(decStr, 10); !ok {
panic("invalid decimal string")
}
resultHex = fmt.Sprintf("%016X", bigInt)[2:14]
fmt.Println("From exact decimal:", resultHex) // 同样输出:000015877CD0
}// ❌ 危险:直接写 uint64 字面量(Go 会尝试解析为 float64 再转 uint64)
var V = 10736581604118680000 // 实际被当作 float64 近似,已失真
// ❌ 更危险:先 ParseFloat 再转 uint64
f, _ := strconv.ParseFloat("10736581604118680000", 64)
v := uint64(f) // 此步发生不可逆精度截断
// ❌ 错误假设:认为 uint64 能无损容纳所有 19 位十进制数
// 实际上:10736581604118679553 和 10736581604118680000 在 uint64 中可能映射到同一值// 比较 float64 解析前后是否相等
s := "10736581604118679553"
f, _ := strconv.ParseFloat(s, 64)
back := strconv.FormatUint(uint64(f), 10)
fmt.Println("Original:", s)
fmt.Println("Rounded: ", back
) // 若不等,则已失真
// 输出:Original: 10736581604118679553
// Rounded: 10736581604118679552 ← 已偏差!精度不是玄学,而是可预测的工程约束。用对工具,就能让每颗 iButton 的身份认证坚如磐石。
# go
# go语言
# 字节
# 工具
# ai
# math
# 字符串
# int
相关文章:
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
三星网站视频制作教程下载,三星w23网页如何全屏?
为什么Go需要go mod文件_Go go mod文件作用说明
Android自定义listview布局实现上拉加载下拉刷新功能
高端建站如何打造兼具美学与转化的品牌官网?
,怎么用自己头像做动态表情包?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
建站上传速度慢?如何优化加速网站加载效率?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
,石家庄四十八中学官网?
如何在阿里云通过域名搭建网站?
Java解压缩zip - 解压缩多个文件或文件夹实例
建站之星微信建站一键生成小程序+多端营销系统
韩国服务器如何优化跨境访问实现高效连接?
如何在阿里云部署织梦网站?
如何访问已购建站主机并解决登录问题?
如何在IIS中新建站点并配置端口与IP地址?
如何快速选择适合个人网站的云服务器配置?
建站之星2.7模板:企业网站建设与h5定制设计专题
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何获取上海专业网站定制建站电话?
如何制作一个表白网站视频,关于勇敢表白的小标题?
定制建站流程解析:需求评估与SEO优化功能开发指南
完全自定义免费建站平台:主题模板在线生成一站式服务
网站制作的步骤包括,正确网址格式怎么写?
如何用景安虚拟主机手机版绑定域名建站?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
定制建站方案优化指南:企业官网开发与建站费用解析
C#怎么创建控制台应用 C# Console App项目创建方法
如何快速搭建高效WAP手机网站?
全景视频制作网站有哪些,全景图怎么做成网页?
广东企业建站网站优化与SEO营销核心策略指南
建站之星好吗?新手能否轻松上手建站?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
在线制作视频网站免费,都有哪些好的动漫网站?
,制作一个手机app网站要多少钱?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何选择服务器才能高效搭建专属网站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何通过wdcp面板快速创建网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
香港网站服务器数量如何影响SEO优化效果?
如何在阿里云高效完成企业建站全流程?
如何配置FTP站点权限与安全设置?
*请认真填写需求信息,我们会在24小时内与您取得联系。