Android犀牛计算异常行为

时间:2019-06-01 16:55:17

标签: java android rhino

我正在使用这个项目(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 :(得分:0)

在JavaScript中,在整数前面加上0会将其强制转换为八进制,将0x强制将其强制转换为十六进制,将0b强制转换为二进制。

如果整数中有8或9,则不会发生这种情况,因为在这种情况下,无法强制转换为八进制。

因此,此行为对于JavaScript来说似乎是完全正常的。所以我需要对待我的表情以避免这种情况。