我正在尝试使用Rhino将Javascript嵌入Java中。我发现当我在Javascript中eval一个将两个整数相加的脚本时,结果会以Double形式返回。
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
engine.put("x", 3);
engine.put("y", 4);
assertEquals(3, engine.eval("x")); // OK
assertEquals(4, engine.eval("y")); // OK
assertEquals(7, engine.eval("x + y")); // FAILS, actual = (Double) 7.0
那么为什么
x + y
表达式返回的是double而不是int呢?是Javascript本身在进行我不理解的某种类型提升吗?
4.0000000000000
的值。但是,4.0000000000000 + 3.0000000000000
可能变成7.0000000000001
。JavaScript会友好地给你7,但Java更懂,翻译过程中某些地方会得到7.0。 - travis