자바에서 자바 스크립트를 임베드하기 위해 Rhino를 사용해보고 있습니다. Javascript에서 두 개의 int를 함께 추가하는 스크립트를 평가할 때 결과가 Double로 돌아옵니다.자바의 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
표현하는 int의 두 대신을 반환합니까?
Javascript 자체가 일부 형식 승격을하고 있습니까? 이해가 안됩니까?
확인 -하지만 몇 가지 숫자는 두 배 등의 int 등으로 돌아 오지 않는 이유는 무엇입니까? – wrschneider
추측을해야한다면 부동 소수점 근사와 관련이 있습니다. Rhino가 멋진 정수를 얻을 때 stain 값은'4.0000000000000'이지만,'4.0000000000000 + 3.0000000000000'은'7.0000000000001'이됩니다. 자바 스크립트가 좋으면 7을 제공하지만 자바는 번역을 잘 알고 있기 때문에 7.0을 얻을 수 있습니다. – travis