Как мне конвертировать Float64 в Base36 в Go? - PullRequest
0 голосов
/ 26 сентября 2018

Я говорю значение 0.36388617850285954, когда я использую функцию Javascript .toString(36), я получаю вывод "0.d3lh1pogpwk". Я хотел бы повторить это в golang, однако у меня нет реальной отправной точки.

Как мне это осуществить?

1 Ответ

0 голосов
/ 26 сентября 2018

Пакеты 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),Кроме того, это тяжелая библиотека для импорта, если это будет ее единственной целью.

...