`

mvel表达式遇到的坑2 这个更坑

    博客分类:
  • java
 
阅读更多
之前写的一篇文章说的mvel遇到的坑 解决办法是*1.0,这次貌似是无解了

public static void main(String[] args) {
		System.err.println(19950574*0.3);
		System.err.println(19950574*0.2999999399);
		String exp3="a*b";  
        Map<String, Object> map=new HashMap<>();  
        map.put("a", 19950574);  
        map.put("b", 0.3);  
        Serializable exp4 = MVEL.compileExpression(exp3);  
        System.err.println( MVEL.executeExpression(exp4, map, Double.class)); 
	}




结果是
5985172.2
5985171.000970502
5985171.0

从结果来看mvel是把0.3 当成了0.2999999399,这个就太不精确了吧。
但是  map.put("a", 19950574.0);   就是换成double的时候是ok的,从这来看是mvel的bug了

之前的解决办法是*1.0  但是这里是不ok得。
求办法啊。。。。
0
4
分享到:
评论
1 楼 zyz3000c 2016-10-11  
升级到最新的mvel.jar就可以了。经测试,在mvel2-2.1.3.Final.jar版本中,没有这个问题。下载地址:http://central.maven.org/maven2/org/mvel/mvel2/2.1.3.Final/mvel2-2.1.3.Final.jar

相关推荐

    MVEL 2.0表达式语言

    总之,MVEL 2.0表达式语言是一个强大且灵活的工具,能够简化Java应用中的动态计算和数据处理。通过掌握其语法和特性,开发者可以提高代码的可读性和维护性,同时降低开发复杂度。如果你需要深入学习,建议查看`mvel`...

    \\(^_^)/ 表达式解析器(MVEL)

    MVEL是一个强大的、轻量级的动态脚本语言,主要设计用于简化表达式和脚本的编写。它被广泛应用于Java应用程序中,作为一个快速的表达式语言,允许开发者在运行时进行计算和决策。MVEL支持多种编程概念,如变量、函数...

    Java编程艺术-表达式解析器.rar

    2. **语法分析**:接下来,解析器会根据预定的语法规则(如Bison或ANTLR)将这些标记组合成语法结构,如表达式树。例如,"(100 – 5)"会被解析为一个二元运算表达式,其中100是左操作数,"–"是运算符,5是右操作数...

    Java SpEL、Ognl、MVEL2表达式Hook并记录小项目.zip

    在本项目中,我们将深入探讨这三个表达式语言的用法以及如何在实际项目中实现它们的“Hook”与日志记录功能。 首先,让我们了解一下Java SpEL(Spring Expression Language)。SpEL是Spring框架的一部分,主要用于...

    MVEL 2.doc

    1. **Context对象**的属性:你可以创建一个Context对象,让MVEL根据这个对象来映射标识符。例如,我们创建一个`Person`类,并设置它的`name`属性为"Mr. Foo",然后用`MVEL.eval()`方法执行表达式,如下面的例子所示...

    mvel2.0语法指南.pdf

    一条 MVEL 表达式可以从简单到复杂,既可以是一个单一的标识符,也可以是一个包含多个方法调用和内部集合创建的复合表达式。 **2.1.1 属性表达式** - 示例:`user.name` - 解释:这是一个基本的属性表达式,用于...

    使用正则表达式验证一年的12个月份

    在这个场景中,我们需要创建一个正则表达式来验证输入是否符合一年12个月份的格式。 首先,我们要明确一年中的12个月份的可能形式。它们可以是数字(1-12)或完整的英文月份(January到December)。如果只考虑数字...

    c++ 计算表达式结果(二叉树、后缀表达式)

    在“ConvertExpressTest2”这个文件中,可能包含了用于测试上述过程的代码。它可能包括了中缀表达式转后缀表达式、后缀表达式计算结果的功能,并且可能提供了示例输入和预期输出,用于验证算法的正确性。 总的来说...

    C++后缀表达式转前缀表达式

    为了完成这个操作,我们需要使用栈数据结构来存储和处理表达式中的操作符和操作数。 首先,让我们了解一下什么是后缀表达式和前缀表达式。后缀表达式是一种表达式形式,其中操作符写在操作数之后,例如:a+b*c。...

    算术表达式求值

    遇到运算符时,与临时栈顶的运算符比较优先级,如果当前运算符优先级更高或相等,则将临时栈顶的运算符弹出并加入到结果后缀表达式,直到当前运算符优先级低于临时栈顶运算符;最后,将当前运算符入临时栈。遇到左...

    数学表达式求值 表达式求值

    这个程序是用C语言编写的,其目标是解析并计算用户输入的数学表达式。以下是一些关于这个主题的重要知识点: 1. **表达式解析**:在计算机科学中,表达式可以是数字、运算符和变量的组合,如2 + 3或x * (y - z)。...

    DB2使用正则表达式.

    DB2使用正则表达式所需的压缩包,按照博客步骤进行操作

    java堆栈的应用--中缀表达式转换成后缀表达式和计算

    1. **中缀表达式**:这是我们常见的数学表达式形式,如 `2 + 3 * 4`,其中操作符位于操作数之间。在解析这样的表达式时,需要考虑运算符的优先级和结合性。 2. **后缀表达式**(也称为逆波兰表示法):在这种表示法...

    算数表达式2_表达式二叉树_算数表达式求值_

    这里,我们将深入探讨"算数表达式2_表达式二叉树_算数表达式求值_"这一主题,特别是通过二叉树结构来实现算术表达式的求值。 首先,我们需要理解什么是算数表达式。一个算数表达式通常包含数字、运算符(如加号"+...

    数学表达式解析器(中缀表达式求值)

    这通常涉及到创建一个运算符栈,遍历中缀表达式,遇到数字时将其添加到输出队列,遇到运算符时与栈顶运算符比较优先级,根据优先级决定是否入栈或输出。 2. **运算符优先级**:理解并定义每个运算符的优先级是至关...

    逗号表达式(表达式1,表达式2….)逗号表达式最右边的值为逗号表达式的值.one

    逗号表达式(表达式1,表达式2….)逗号表达式最右边的值为逗号表达式的值.one

Global site tag (gtag.js) - Google Analytics