使用表达式计算库Aviator可能会踩的坑,你必须知道

简单介绍

Aviator是一个高性能、轻量级的基于java实现的表达式引擎,它动态地将String类型的表达式编译成Java ByteCode并交给JVM执行。

想了解这个库的中文使用文档的,可以点击Aviator

pom可以这样添加

        <dependency>
            <groupId>com.googlecode.aviator</groupId>
            <artifactId>aviator</artifactId>
            <version>5.2.5</version>
        </dependency>

一般来说,可以使用AviatorEvaluator.execute方法来进行表达式计算

public static Object execute(String expression, Map<String, Object> env)

expression是表达式,比如"x*1.5+30"

env是参数与参数值的映射关系,比如<“x”,3>

调用方法后的计算结果就是3*1.5+30,即34.5,是一个浮点数。

容易踩到的坑

AviatorEvaluator.execute的返回结果是Object,但这个Object不是某个固定的子类,它的返回值可能是BigInt、double、Decimal、甚至是Boolean,具体类型取决于你的表达式定义,参考此文章

如果你希望获取到的最终结果是一个统一的浮点数,则需要写一个转换方法,举个例子

public double convertToDouble(Object obj) {
    if (obj instanceof Boolean) {
        return (Boolean) obj ? 1 : 0;
    } else if (obj instanceof Long) {
        return ((Long) obj).doubleValue();
    } else if (obj instanceof Double) {
        return (Double) obj;
    } else {
        return 0;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值