为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
千巷猫影 2022-08-24 18:48:50
因此,在go中,我做了一个计算,给出了“5726718050568503296”在JS中,它给出了“5726718050568503000”我想在 go 中复制此行为
查看完整描述

2 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

正如其他人提到的为什么在JS中5726718050568503296截断的评论中所讨论的那样,这是由JavaScript中实现的方式引起的,它似乎使用有效数字的最小数量来返回相同的表示数字,而不是返回数学上最接近的数字。但是,您可以在 Go 中复制此行为,方法是使用以下特殊精度:toString()-1strconv.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


查看完整回答
反对 回复 2022-08-24
?
呼如林

TA贡献1798条经验 获得超3个赞

似乎没有简单的方法可以解决这个问题。JS有它表示Number类型的方式,你提供的整数基本上溢出了它的容量。请参阅:https://stackoverflow.com/a/1379973/10316247 有关JS如何处理此问题以及为什么会发生这种奇怪行为的更多信息。

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

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


查看完整回答
反对 回复 2022-08-24
  • 2 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信