【发布时间】:2014-11-17 08:06:22
【问题描述】:
考虑以下代码示例:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main( String[] args ) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
System.out.println( "eval = " + eval );
System.out.println( "eval.getClass() = " + eval.getClass() );
}
}
为什么会产生以下输出?
评估 = 0.0
eval.getClass() = class java.lang.Double
结果类型是java.lang.Double,这是奇怪的。
如果余数不为 0,则正确返回 java.lang.Integer,例如5%2 返回java.lang.Integer' with value1`。
只有 0 有点特殊。
在 Firefox 32.0.2(FindBugs 控制台)中尝试相同的 JavaScript 表达式可以正常工作并返回纯 0。
有没有办法强制 Nashorn 返回 Integer 类型而不是 Double?
【问题讨论】:
-
JavaScript 只有浮点数类型。
-
@Teemu 感谢您的意见,但这里为什么重要?在内部它可能是一个浮点数,但它能够以某种方式将它“转换”为整数,例如
5%2产生整数 1。如果在这种情况下得到 1.0,我会接受这样的解释。 -
Firefox 没有“投射”任何东西。这只是它如何显示浮点值 1.0 的问题。
-
好的,我想我们在这里有点偏离轨道。忘记铸造/火狐等。仍然有效的问题是为什么
5%2导致java.lang.Integer(1)和5%5导致java.lang.Double(0.0)
标签: javascript java-8 modulo nashorn