问题描述
所以在 go 中,我做了一个计算,给出“5726718050568503296” 在 JS 中,它给出“5726718050568503000”
我想在 go 中复制这种行为
解决方法
正如其他人在 Why is 5726718050568503296 truncated in JS 的评论中所讨论的那样,这是由 toString()
在 JavaScript 中实现的方式引起的,它似乎使用最少的有效数字来返回相同的表示数字,而不是返回数学上最接近的数字。但是,您可以通过使用特殊的 -1
精度和 strconv.FormatFloat
:
package main
import (
"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 将如何处理它。
我会(如上面的链接所示)将其用作和字符串。