首页 > 后端开发 > Golang > 如何在 Go 中准确地将 float64 转换为 uint64?

如何在 Go 中准确地将 float64 转换为 uint64?

DDD
发布: 2024-12-20 00:12:27
原创
126 人浏览过

How to Accurately Convert a float64 to a uint64 in Go?

如何正确地将 Float64 数字转换为 UInt64

考虑以下 Go 代码:

package main

func main() {
    var n float64 = 6161047830682206209
    println(uint64(n))
}
登录后复制

预期的结果输出是将 float64 数字转换为 uint64,并保留该值。然而,实际输出是 6161047830682206208,表明小数部分被丢弃。

理解问题

由于浮点数的精度限制而产生差异使用 IEEE 754 标准表示。在 IEEE 754 中,分配了 53 位用于存储 64 位浮点数(Go 中的 float64)中的数字。对于给定的常量,可以表示的位数小于常量本身的位数。

因此,常量不能精确地存储在 float64 变量中,并且某些数字被四舍五入,丢失的。这可以通过打印原始的 n 个 float64 数字来确认:

fmt.Printf("%f\n", n)
fmt.Printf("%d\n", uint64(n))
登录后复制

正确转换

要将 float64 数字正确转换为 uint64,建议使用Trunc 函数,截断 float64 数字的小数部分并返回整数部分:

package main

import "math"

func main() {
    var n float64 = 6161047830682206209
    println(uint64(math.Trunc(n)))
}
登录后复制

此方法可确保转换整数值时不会损失任何精度。

以上是如何在 Go 中准确地将 float64 转换为 uint64?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板