在 golang 中复制 javascript 不安全的数字

因此,在go中,我做了一个计算,给出了“5726718050568503296”在JS中,它给出了“5726718050568503000”

我想在 go 中复制此行为


千巷猫影
浏览 64回答 2
2回答

动漫人物

正如其他人提到的为什么在JS中5726718050568503296截断的评论中所讨论的那样,这是由JavaScript中实现的方式引起的,它似乎使用有效数字的最小数量来返回相同的表示数字,而不是返回数学上最接近的数字。但是,您可以在 Go 中复制此行为,方法是使用以下特殊精度:toString()-1strconv.FormatFloatpackage mainimport (    "fmt"    "strconv")func main() {    n, _ := strconv.ParseInt(strconv.FormatFloat(5726718050568503296.0, 'f', -1, 64), 10, 64)    fmt.Println(n)}操场链接: https://play.golang.org/p/9ZObcB3so4o

呼如林

似乎没有简单的方法可以解决这个问题。JS有它表示Number类型的方式,你提供的整数基本上溢出了它的容量。请参阅:https://stackoverflow.com/a/1379973/10316247 有关JS如何处理此问题以及为什么会发生这种奇怪行为的更多信息。在 go 中复制它将是非常非常棘手的,因为您需要查看此 int 的字节表示形式,并尝试假设 JS 将如何处理它。我会(如上面的链接所示)将其用作和字符串。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go