如何解决在golang中复制javascript不安全数字
所以在 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 将如何处理它。
我会(如上面的链接所示)将其用作和字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。