2013-03-20 77 views
3

我正在嘗試Rhino在Java中嵌入Javascript。我注意到,當我評估一個在JavaScript中添加兩個ints的腳本時,結果會以Double的形式返回。從Java的Rhino JS/ScriptEngine - 整數,雙打?

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本身做某種類型的促銷我不明白?

回答

3

有趣的事實:javascript(ECMAScript)中的所有數字都是雙精度的。

號碼類型具有完全相同18437736874454810627(即,264-253 + 3) 值,代表雙精度64位格式IEEE 754如在IEEE標準二進制浮點 指定 值算術,除了9007199254740990(即253-2)不同 IEEE標準的「非數字」值在 ECMAScript中表示爲單個特殊的NaN值。

http://people.mozilla.org/~jorendorff/es6-draft.html#sec-8.1.5

+0

確定 - 但後來爲什麼有些數字回來作爲整數和他人雙打? – wrschneider 2013-03-20 16:36:29

+0

如果我不得不猜測它與浮點近似有關。當Rhino得到一個很好的整數時,它給出了一個明確的值「4.0000000000000」,但是,「4.0000000000000 + 3.0000000000000」可能變成了「7.0000000000001」。 JavaScript很好只是給你7,但Java知道更好,在翻譯的某個地方你會得到7.0 – travis 2013-03-20 17:12:21

2

JavaScript只有一種數字類型 - Number,類似於Java Double類型。我期望引擎強制類型爲Number來執行算術。