如何在 Go 中将 Float64 转换为 Base36?

How do I convert a Float64 to Base36 in Go?

我已经说了值 0.36388617850285954,当我使用 Javascript .toString(36) 函数时,我得到了输出 "0.d3lh1pogpwk". 我想在 golang 中复制它但是我没有真正的起点。

我将如何执行此操作?

Go base36 包无法正确转换,因为 Javascript 的 toString(36) 不对 float64 进行 base36 编码,它使用基数 36 表示它。文档乏善可陈该函数如何作用于 Number 个对象(且仅作用于数字对象)的细节,逻辑也很奇怪,但位于此处:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString#Description

基本上,在非整数的情况下,将值转换为baseN中的数字(其中N是传入的基数),通过将小数点左侧的转换与一个点连接起来,然后用小数点右边的转换。例如

baseNLeft + "." + baseNRight

上面的文档 link 中还解释了其他关于底片的注意事项。具体来说,他们保留负数并简单地转换数字然后替换负号而不是使用二进制补码表示。

在我看来,此功能不适用于 Javascript 本身以外的任何其他语言,我建议在跨语言使用它时谨慎。

关于如何在 Go 中执行此操作的问题本身的回答。遵循相同的愚蠢语义并针对数十万个测试用例对其进行单元测试,以检查 Javascript 和您的 Go 实现中的 f(x) = y。逻辑的实际规范在此处的 ECMA 规范中:https://www.ecma-international.org/ecma-262/6.0/#sec-tostring-applied-to-the-number-type

注意:在Go中实现了一个Javascript引擎叫做otto(github.com/robertkrimen/otto),但是它 没有 正确执行 Number.toString(radix) 功能。另外,如果这是它的唯一目的,那么导入它是一个沉重的库。