英文:
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二进制浮点数算术。对于某些十进制值,浮点数算术是不精确的。
参考资料:
英文:
Go, like everyone else, uses IEEE-754 binary floating-point arithmetic. Floating-point arithmetic is inexact for some decimal values.
References:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论