Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自Java的Rhino JS/ScriptEngine-整数输入,双倍输出?_Java_Javascript_Rhino - Fatal编程技术网

来自Java的Rhino JS/ScriptEngine-整数输入,双倍输出?

来自Java的Rhino JS/ScriptEngine-整数输入,双倍输出?,java,javascript,rhino,Java,Javascript,Rhino,我正在尝试Rhino在Java中嵌入Javascript。我注意到,当我在Javascript中评估一个将两个int加在一起的脚本时,结果返回为Double ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.put("x", 3); engine.put("y", 4); assertEquals(3, engine.eval("x")); // OK assertEqua

我正在尝试Rhino在Java中嵌入Javascript。我注意到,当我在Javascript中评估一个将两个int加在一起的脚本时,结果返回为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本身是否在做一些我不理解的类型提升

JavaScript只有一个数字类型,与Java类型类似。我希望引擎将类型强制为
Number
以执行算术。

有趣的事实:javascript(ECMAScript)中的所有数字都是双精度的

数字类型正好是18437736874454810627(即264)−253+3) 值,表示双精度64位格式IEEE 754 IEEE标准中规定的二进制浮点值 算术,除了9007199254740990(即253−2) 明显的 IEEE标准的“非数字”值表示为 ECMAScript作为一个特殊的NaN值


好的-但是为什么有些数字是整数,有些是双倍数呢?如果我不得不猜测,它与浮点近似有关。当Rhino得到一个好的整数时,它给它一个正确的值
4.0000000000000
,然而,
4.0000000000000+3.0000000000000
可能变成
7.0000000000001
。JavaScript很好,只会给你7,但Java知道得更好,在翻译过程中,你会得到7.0