Hi,
The latest 8u-dev code @
http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn prints this:
eval = 0
eval2 = 1
eval.getClass() = class java.lang.Integer
eval2.getClass() = class java.lang.Integer
That said it is better to avoid depending on Java side value to be a
specific subtype of Number (like Integer, Double, Long). It is better to
expect and handle Numbar and call intValue(), doubleValue() on it. That
gives maximum freedom for Nashorn implementation. Nashorn tries to
represent int/long/double as appropriate for the specific cases.
-Sundar
On Tuesday 23 September 2014 06:47 PM, David P. Caldwell wrote:
Asked by a StackOverflow user; I've produced a clearer reproduction case below.
Original question is
http://stackoverflow.com/questions/25989642/why-does-java-8-nashorn-javascript-modulo-returns-0-0-double-instead-of-0-i/25991982
It confused the asker and I confess it makes no sense to me:
public class Tester {
public static void main( String[] args ) throws Exception {
javax.script.ScriptEngine se = new
javax.script.ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
Object eval2 = se.eval( "5%2" );
System.out.println( "eval = " + eval );
System.out.println( "eval2 = " + eval2 );
System.out.println( "eval.getClass() = " + eval.getClass() );
System.out.println( "eval2.getClass() = " + eval2.getClass() );
}
}
Result:
$ java -version && javac Tester.java && java Tester
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
eval = 0.0
eval2 = 1
eval.getClass() = class java.lang.Double
eval2.getClass() = class java.lang.Integer