Javascript 四舍五入后无法从Nashorn引擎接收非小数位数

Javascript 四舍五入后无法从Nashorn引擎接收非小数位数,javascript,java,nashorn,Javascript,Java,Nashorn,我有一个关于纳肖恩引擎的问题 核心问题是使用Math.round()四舍五入后,无法从Nashorn引擎接收非小数位数 但是它返回带小数点的值,尽管在js中它提供了不带小数点的值,当我只返回harcoded原语时,它工作得很好 如何将浮点值转换为最接近的整数,并通过Nashorn接收。我知道我可以简单地执行返回(num+);。但我喜欢做得更好,学点新东西。 注意:我想用js函数来实现这一点 script.js var nonMath = function(){ var num = 2;

我有一个关于纳肖恩引擎的问题

核心问题是使用
Math.round()
四舍五入后,无法从Nashorn引擎接收非小数位数

但是它返回带小数点的值,尽管在js中它提供了不带小数点的值,当我只返回harcoded原语时,它工作得很好

如何将浮点值转换为最接近的整数,并通过Nashorn接收。我知道我可以简单地执行
返回(num+)
;。但我喜欢做得更好,学点新东西。 注意:我想用js函数来实现这一点

script.js

var nonMath = function(){
    var num = 2; 
    print("num : " + num); //prints 2
    return (num);
};

var doMath = function(){
    var num = Math.round(2.0); 
    print("num : " + num); //prints 2
    return (num);
};
TestClass.java

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
engine.eval(new FileReader("lib/script.js"));

Invocable invocable = (Invocable) engine;
System.out.println("nonMath : " + invocable.invokeFunction("nonMath")); //prints 2
System.out.println("doMath : " + invocable.invokeFunction("doMath")); //prints 2.0
您可以使用截断
Math.round的结果,如

var doMath = function(){
    var num = ~~Math.round(2.0);
    return num;
}
我用你的代码运行得到的

doMath : 2

那很有效谢谢你,艾略特!也谢谢你的链接。