四舍五入后无法从 Nashorn 引擎接收非小数位数
Unable to receive a non decimal place number from Nashorn engine after rounding
我有一个与 Nashorn 引擎的 Numbers 相关的问题
核心问题是在使用 Math.round()
舍入后无法从 Nashorn 引擎接收非小数位数字。
但是它 return 的值带有小数位,尽管在 js 中它提供没有小数位,当我只是 return 硬编码原语时,它工作正常。
我怎么需要将浮点值转换为最接近的整数并通过 Nashorn 接收它。我知道我可以简单地做 return (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
我有一个与 Nashorn 引擎的 Numbers 相关的问题
核心问题是在使用 Math.round()
舍入后无法从 Nashorn 引擎接收非小数位数字。
但是它 return 的值带有小数位,尽管在 js 中它提供没有小数位,当我只是 return 硬编码原语时,它工作正常。
我怎么需要将浮点值转换为最接近的整数并通过 Nashorn 接收它。我知道我可以简单地做 return (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