EXP4J是否处理小数

时间:2014-02-08 18:20:09

标签: android parsing

我在我的应用中有这个;

Calculable result= new ExpressionBuilder(s1).build();
            size.setText(Double.toString(result.calculate()));
            size_num = result.calculate();

如果我在S1中输入100 * .25,它会给我一个例外。没有小数,没关系。是否存在EXP4J可以处理小数的变通方法?

另外,如果我在我的等式之后输入一个标签,EXP4J似乎无法处理。在调用EXP4J之前,有没有人知道如何处理方程式中的选项卡?

谢谢!

1 个答案:

答案 0 :(得分:2)

不是那些小数。

查看the source of the tokenizer

// ... snip ...

for (int i = 0; i < chars.length; i++) {

    // ... snip ...

    if (Character.isDigit(c)) {                                    // matches digit

        // ... snip ...

        while (chars.length > i + numberLen) {
            if (isDigitOrDecimalSeparator(chars[i + numberLen])) { // matches '.'

                // ... snip ...

您可以看到,只有在令牌中匹配小数点分隔符时,才会首先匹配数字。

所以我怀疑这会很好:"100*0.25",但不是"100*.25"

  

另外,如果我在我的等式之后输入一个标签,EXP4J似乎无法处理。有没有人知道如何在调用EXP4J之前处理方程式中的选项卡?

tokenizer会忽略空格,所以要么在解析之前用空格替换制表符,要么一起删除制表符应该可以解决问题:

s1 = s1.replace("\t", "");
Calculable result= new ExpressionBuilder(s1).build();