2014-02-08 4 views
1

У меня это в моем приложении;Делает ли EXP4J десятичными знаками

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

Если я ввожу 100 * .25 в S1, это дает мне исключение. Без десятичного числа это нормально. Есть ли способ, которым 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

Смежные вопросы