栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么eval类给我一个从int到double的转换错误?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么eval类给我一个从int到double的转换错误?

Nashorn使用乐观类型(自JDK
8u40起
),因此在不需要双精度时将使用整数。因此,您不能指望它返回Double。

同样,

5*x^2
在Javascript中的意思是“五倍x两倍”。该
**
幂运算符是Javascript语言的较新版本定义,但犀牛不支持它。

如果将Javascript代码更改为

5*x*x
可以运行,但是这样做会更安全:

total += 0.001 * ((Number)engine.eval(function)).doublevalue();

编译常用代码

由于您是在循环中反复调用此函数,因此最佳实践是提前编译该函数。性能优化不是严格必要的,但因为引擎每次都必须编译您的函数(尽管它可能使用缓存来帮助您完成此工作)。

import javax.script.Compilable;import javax.script.Compiledscript;import javax.script.Invocable;import javax.script.scriptContext;Compiledscript compiledscript = ((Compilable)engine)    .compile("function func(x) { return " + function + "}");compiledscript.eval(compiledscript.getEngine()    .getBindings(scriptContext.ENGINE_SCOPE));Invocable funcEngine = (Invocable) compiledscript.getEngine();// . . .total += 0.001 * ((Number)funcEngine.invokeFunction("func", i)).doublevalue();

使用ES6语言功能

将来,Nashorn确实支持该

**
运营商时,如果要使用它,则可能需要打开如下ES6功能:

import jdk.nashorn.api.scripting.NashornscriptEngineFactory;NashornscriptEngineFactory factory = new NashornscriptEngineFactory();scriptEngine enjin = factory.getscriptEngine("--language=es6");

或像这样:

java -Dnashorn.args=--language=es6

*编辑以考虑注释中指出的数学修正。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/515659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号