2014-02-08 11 views
1

我在我的應用程序中有這個;EXP4J是否處理小數點

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

如果我在S1中輸入100 * .25,它會給我一個例外。沒有小數點的話,沒關係。有EXP4J可以處理小數的解決方法嗎?

另外,如果我在我的等式之後輸入一個選項卡,EXP4J似乎無法處理該問題。有沒有人知道在EXP4J被調用之前如何處理等式中的選項卡?

謝謝!

回答

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被調用之前如何處理等式中的選項卡?

標記生成器忽略空格,因此無論是用空格代替製表符,或對其進行解析之前移除標籤一起應該做的伎倆:

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

謝謝你,巴特。 Java仍然有很大的學習曲線。 – user1733468