首页 > 后端开发 > Golang > 为什么在 Go 中将 float64 转换为 int 会产生意外结果?

为什么在 Go 中将 float64 转换为 int 会产生意外结果?

Patricia Arquette
发布: 2024-12-14 22:11:12
原创
749 人浏览过

Why Does Converting float64 to int in Go Produce Unexpected Results?

在 Go 中将 float64 转换为 int 时出错

简介

在 Go 中将浮点数 (float64) 转换为整数 (int) 可能会导致由于浮点表示的限制,出现了意想不到的结果。

理解问题

像 100.55 这样的十进制数无法使用计算机使用的内部表示形式的有限位数的二进制来精确表示。 Go 中的 Float64 值符合 IEEE-754 标准,该标准使用 53 位作为小数部分。这意味着 100.55 近似于最接近的可表示的二进制数,从而导致轻微的差异。

示例

考虑以下代码:

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Println(x - float64(int(x)))
}
登录后复制

运行此代码将打印:

0.5499999999999972
登录后复制

而不是预期的0.55.

解决方案

字符串格式化程序 (fmt.Printf)

处理此差异的一种方法是在打印之前将浮点数舍入到所需的精度。

package main

import "fmt"

func main() {
    x := 100.55
    fmt.Printf("%.2f\n", x)
}
登录后复制

这段代码prints:

0.55
登录后复制

非浮点表示

另一种方法是完全避免使用浮点数。例如,要表示美元金额,您可以使用分作为整数,并在显示时按 100 缩放。

cents := 10055
fmt.Printf("%d.%d $\n", cents/100, cents%100)
登录后复制

此代码打印:

100.55 $
登录后复制

以上是为什么在 Go 中将 float64 转换为 int 会产生意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

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