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

replicate javascript unsafe numbers in golang

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

我想在 go 中复制这个行为

似乎没有简单的解决方法。 JS 有其表示 Number 类型的方式,您提供的整数基本上溢出了它的容量。 请参考: 了解更多关于 JS 如何处理这个问题以及为什么会发生这种奇怪行为的信息。

在 go 中复制它会非常棘手,因为您需要查看此 int 的字节表示并尝试假设 JS 将如何处理它。

我会(如上面 link 所建议的那样)将其用作字符串。

正如其他人在 的评论中所讨论的那样,这是由 toString() 在 JavaScript 中实现的方式引起的,它似乎使用了最小有效数字位数return 相同的表示数字,而不是 return 数学上最接近的数字。但是,您可以通过使用 strconv.FormatFloat:

的特殊 -1 精度在 Go 中复制此行为
package main

import (
    "fmt"
    "strconv"
)

func main() {
    n, _ := strconv.ParseInt(strconv.FormatFloat(5726718050568503296.0, 'f', -1, 64), 10, 64)
    fmt.Println(n)
}

游乐场link:https://play.golang.org/p/9ZObcB3so4o