Пакеты Go base36 не преобразуют это должным образом, потому что toString(36)
в Javascript не кодирует base36 в код float64, он представляет его с использованием радиуса 36. Документация довольно скудна в отношении особенностей работы этой функции на * 1002.* объекты (и только числовые объекты), и логика также очень причудлива, но находится здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString#Description
В основном, в случае не целого числа, значение преобразуется в числов baseN (где N - переданное основание), путем конкатенации преобразования левой части десятичной точки с точкой, затем с преобразованием правой стороны десятичной дроби.например,
baseNLeft + "." + baseNRight
Там также другие соображения, объясненные в ссылке на документацию выше о негативах.В частности, они сохраняют минус и просто преобразуют цифры, а затем заменяют знак минус вместо использования представления дополнения до двух.
На мой взгляд, эта функциональность не подходит ни для какого другого языка, кроме самого Javascript, и я хотел бысоветуйте с осторожностью использовать его на нескольких языках.
Что касается ответа на сам вопрос, а также на то, как вы будете делать это в Go.Следуйте той же глупой семантике и протестируйте ее на сотнях тысяч тестовых случаев, чтобы проверить, что f(x) = y
как в Javascript, так и в вашей реализации Go.Фактическая спецификация логики находится в спецификации ECMA здесь: https://www.ecma -international.org / ecma-262 / 6.0 / # sec-tostring-apply-to-number-type
Примечание : в Go реализован движок Javascript, называемый otto
(github.com/robertkrimen/otto), но он не должным образом не выполняет функцию Number.toString(radix)
,Кроме того, это тяжелая библиотека для импорта, если это будет ее единственной целью.