Android носорог расчет странное поведение - PullRequest
0 голосов
/ 01 июня 2019

Я использую этот проект (https://github.com/APISENSE/rhino-android) для расчетов в моем приложении для Android.

Однако некоторые числа, начинающиеся с 0 в выражении, вызывают странное поведение в вычислениях. Например:

  • eval (016 + 2) возвращает 16.
  • eval (016) возвращает 14.
  • eval (031) возвращает 25.
  • eval (031x2) возвращает 50.

Другие примеры, которые выглядят хорошо:

  • eval (018 + 2) возвращает 20.
  • eval (019 + 5) возвращает 24.

Пример кода:

String expression = "016+2";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
double result = (double) engine.eval(expression);

Есть идеи?

1 Ответ

0 голосов
/ 02 июня 2019

В JavaScript установка 0 перед целым числом приведёт к восьмеричному преобразованию, а 0x - к шестнадцатеричному, а к двоичному 0b.

Это поведение не имеет место, если в вашем целом числе есть 8 или 9, поскольку приведение к восьмеричному в этом случае невозможно.

Так что поведение здесь кажется совершенно нормальным для JavaScript. Поэтому мне нужно отнестись к своему выражению, чтобы избежать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...