`

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支持多种编程概念,如变量、函数...

    MVEL 2.doc

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

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

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

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

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

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

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

    算术表达式求值

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

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

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

    DB2使用正则表达式.

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

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

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

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

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

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

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

    表达式求值代码

    当我们遇到一个运算符时,我们会将其压入栈中,直到遇到一个优先级更高的运算符或者遇到一个括号闭合。在遇到一个操作数时,我们会弹出栈顶的运算符,并用当前操作数与之前的操作数进行运算,然后将结果压回栈中。这...

    中缀表达式转后缀表达式

    实现这个功能的C++代码通常会包含输入处理、表达式转换和计算结果三个主要部分。在实际开发中,可能还需要考虑到性能优化、用户体验和代码可读性等因素。理解这些概念并能熟练运用,对于学习编译原理和算法设计有着...

    stack-2&3_栈_数据结构_后缀表达式_Stack2_stack2_

    通过阅读和理解这个文件,我们可以学习如何使用栈解决实际问题,掌握中缀表达式和后缀表达式之间的转换,以及如何高效地求解数学表达式。 总之,栈在处理表达式求值方面展示了其强大的能力。了解并熟练掌握这些概念...

Global site tag (gtag.js) - Google Analytics