因此,在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
呼如林
TA贡献1798条经验 获得超3个赞
似乎没有简单的方法可以解决这个问题。JS有它表示Number类型的方式,你提供的整数基本上溢出了它的容量。请参阅:https://stackoverflow.com/a/1379973/10316247 有关JS如何处理此问题以及为什么会发生这种奇怪行为的更多信息。
在 go 中复制它将是非常非常棘手的,因为您需要查看此 int 的字节表示形式,并尝试假设 JS 将如何处理它。
我会(如上面的链接所示)将其用作和字符串。
- 2 回答
- 0 关注
- 63 浏览
添加回答
举报
0/150
提交
取消