gpt4 book ai didi

go - 将 float 打印为字符串时的精度损失

转载 作者:数据小太阳 更新时间:2023-10-29 03:45:40 26 4
gpt4 key购买 nike

<分区>

如果我将 int 数字存储到一个结构中,然后对它们应用除法,我就碰巧遇到了这种情况。精度会丢失。

func main() {
var x = 94911151
var y = 94911150
// If we use the value to calculate division directly, it would be fine
var result1 = float64(94911151)/94911150
var result2 = float64(x)/float64(y)
fmt.Println(result1, result2)
// If we pass the values directly as parameter into a function and then apply division, it would be fine
getParas(x,y)
// If we pass the values into a stuct, and then retrieve the value from struct, then apply division, the precision would be lost.
getLinearParas(Point{x,y},Point{0,0})
}

func getParas(a int, b int){
diffX := a -0
diffY := b-0
c:= float64(diffX) / float64(diffY)
fmt.Println(c)
}

type Point struct{
X int
Y int
}

func getLinearParas(point1 Point, point2 Point) {
diffX := point1.X - point2.X
diffY := point1.Y - point2.Y
a := float64(diffX) / float64(diffY)
fmt.Printf("diffY: %d; diffX:%d ; a:%f \n", diffY, diffX, a)
}

就像代码一样,如果我将 int 值放入一个结构中,然后对它们应用除法。精度会以某种方式丢失。以上代码运行结果为

 1.00000001053617 1.00000001053617
1.00000001053617
diffY: 94911150; diffX:94911151 ; a:1.000000

或者你可以自己去 Playground 试试 https://play.golang.org/p/IDS18rfv9e6

谁能解释为什么会这样?以及如何避免这种损失?非常感谢。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com