登录
首页 >  Golang >  Go问答

在Golang中复制JavaScript不安全数字

来源:stackoverflow

时间:2024-03-12 17:27:25 139浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《在Golang中复制JavaScript不安全数字》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

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

我想在 go 中复制这种行为


正确答案


正如其他人提到的 Why is 5726718050568503296 truncated in JS 的评论中所讨论的,这是由 tostring() 在 javascript 中实现的方式引起的,该方式似乎使用有效数字的最小数量来返回相同的表示数字,而不是返回数学上最接近的数字。但是,您可以通过使用特殊的 -1 精度和 strconv.formatfloat 在 go 中复制此行为:

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 将如何处理它。

我会(如上面的链接所示)将其用作字符串。

到这里,我们也就讲完了《在Golang中复制JavaScript不安全数字》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>