【问题标题】:Golang float arithmetic [duplicate]Golang浮点算术[重复]
【发布时间】:2026-02-09 04:40:01
【问题描述】:

浮点运算在 Go 中是如何工作的

游乐场link

package main

import "fmt"

func main() {
    j := 1.021
    fmt.Println(j)
    k := j*1000
    fmt.Println(k)
    l := int(k)
    fmt.Println(l)
}

Output:
1.021
1020.9999999999999
1020

我期待1021 被打印出来,但我得到了1020

【问题讨论】:

  • 也许你的惊讶来自于忽略了 1.021 不完全是分数 1021/1000,而是最接近这个分数的可能浮点数……请阅读推荐使用浮点标记的文献。跨度>
  • 谢谢。这说明了这一点。有趣的是,我不明白为什么我对这个问题投了反对票。我确实四处寻找并找不到明确的原因。不知何故,我认为这是 Go 特定的,虽然它看起来很通用。
  • @ThomasPadron-McCarthy 是的,是的。谢谢。有趣的是,该帖子获得了 811 个赞,而我的则为 -3。
  • 更多解释在这里@@0.30000000000000004.com

标签: go floating-point floating-accuracy


【解决方案1】:

Go 和其他人一样,使用 IEEE-754 二进制浮点运算。浮点运算对于某些十进​​制值是不精确的。

参考资料:

Floating point

IEEE floating point

【讨论】: