我正在使用此项目 ( 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);
有什么想法吗?
最佳答案
在 JavaScript 中,在整数前面放置 0 会将其转换为八进制,0x 将其转换为十六进制,0b 将其转换为二进制。
如果整数中有 8 或 9,则不会发生此行为,因为在这种情况下不可能转换为八进制。
所以这里的行为对于 JavaScript 来说似乎完全正常。所以我需要处理我的表情以避免这种情况。
关于javascript - Android rhino计算奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56408684/