Golang浮点数算术运算

huangapple go评论119阅读模式
英文:

Golang float arithmetic

问题

在Go语言中,浮点数运算是基于IEEE 754标准的。然而,由于浮点数的内部表示方式和精度限制,可能会导致一些意外的结果。

在你的代码中,你将1.021乘以1000,并将结果赋给变量k。然后,你将k转换为整数并赋给变量l。

由于浮点数的精度限制,1.021乘以1000的结果并不是精确的1021,而是一个非常接近1021的值。这是因为浮点数的内部表示方式使用二进制,而不是十进制。

当你将这个接近1021的浮点数转换为整数时,Go语言会将其截断为1020,而不是四舍五入为1021。

这就是为什么你得到的输出是1.021、1020.9999999999999和1020,而不是你期望的1.021、1020.9999999999999和1021。

如果你需要更精确的浮点数计算,可以使用Go语言的big.Float类型或者其他精确计算的库。

英文:

How does the float arithmetic work in Go

Playground 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

I was expecting 1021 to be printed, but I got 1020

答案1

得分: 5

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

参考资料:

浮点数

IEEE浮点数

英文:

Go, like everyone else, uses IEEE-754 binary floating-point arithmetic. Floating-point arithmetic is inexact for some decimal values.

References:

Floating point

IEEE floating point

huangapple
  • 本文由 发表于 2015年11月11日 06:33:54
  • 转载请务必保留本文链接:https://go.coder-hub.com/33640943.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定