在java中计算一个表达式,精确到19位数字

问题描述 投票:0回答:1

例如,我有一个字符串表达式 公式=“333333333333333333+222222222222222222” 我正在尝试计算表达式的值,使其精确到 18 位。 计算我在java中使用scriptEngine,因为表达式可以是任何表达式,但是我得到的结果为55555555555555552 这是我的代码

ScriptEngineManager scriptEngineManager= new ScriptEngineManager();
ScriptEngine scriptEngine=scriptEngineManager.getEngineByName("JavaScript");
Object result=scriptEngine.eval(formula);

在对象中,我得到指数,通过转换为 bigDecimal 字符串来删除它。但是,如果我使用 scriptEngineManager,计算不准确。 我还尝试通过用“new java.math.BigDecimal(number)”替换所有数字来将数字转换为大十进制,但我仍然得到不准确的值。 我是否必须手动创建一个解析器,在其中使用其函数 bigdecimal.add(bigdecimal) 添加 bigdecimals ,但是在这种情况下,我必须处理 BODMAS 规则以及我必须处理的表达式。

请帮助我如何计算精确到 18 位的字符串表达式。 预先感谢

java formula calculator bigdecimal
1个回答
0
投票

所以我能够通过使用名为 EvalEx 的外部库来解决这个问题。 从中我能够将精度设置为高达 18 位数字,并且能够计算字符串表达式

import com.udojava.EvalEx.Expression;  
import com.udojava.EvalEx.Expression.ExpressionException;

 Expression expr = new Expression(formula);
 expr.setPrecision(18); // Set precision to 18 digits
© www.soinside.com 2019 - 2024. All rights reserved.