2014-09-22 4 views
0

Мои формулы с плавающей точкой не могут функционировать, если существует нулевая переменная. IE, если одна из входных переменных равна нулю, то в TextView не отображается результат, который отображает результат.Формула не работает, если переменные равны нулю

Насколько я могу судить, есть 2 решения.

One устанавливает нулевые EditTexts в 0, если они равны нулю:

if (charisma == null) { 
     charisma.setText(0); 
    } else if (charisma != null) { 
     charisma.setText(getcharisma); 
    } 

Другой игнорирует нулевые переменные в уравнении:

try { 
     float FP = Float.parseFloat(pref.getString("fp", "")); 
     float CHR = Float.parseFloat(charismafpvalue.getText().toString()); 
     float PER = Float.parseFloat(persuasionfpvalue.getText().toString()); 
     float ELI = Float.parseFloat(elicitationfpvalue.getText().toString()); 
     float AML = Float.parseFloat(animalhandlingfpvalue.getText().toString()); 

     if (charismafpvalue == null) { 
      fpr.setText(Float.toString(FP - (PER + ELI + AML)));  
     } else if (charismafpvalue != null) { 
      fpr.setText(Float.toString(FP - (CHR + PER + ELI + AML))); 
     } 



    } 
    catch (NumberFormatException ignore) {} 

Проблема в том, что мой код для обоих из них не удается функционировать. Значения не установлены в 0, если они равны нулю, и формула не работает, несмотря на код if() {} else if() {}.

Любые предложения относительно того, что является лучшим способом справиться с этим? И как его реализовать?

ответ

1

Чистый способ решения этой проблемы является использование Apache Commons NumberUtils#toFloat(String str, float defaultValue) метод:

float chr = NumberUtils.toFloat(charismafpvalue.getText().toString(), 0.0f); 
... 

Это устанавливает chr значение по умолчанию, если преобразование не выполняется, поэтому нет необходимости в try-catch.

+0

это приводит к следующей ошибке: 'NumberUtils не может быть resolved' – Mikitz06

+0

кажется, не импортировать NumberUtils. – Mikitz06

+0

Да, это часть внешней зависимости, предоставляемой Apache Commons под названием Commons Lang. Вы можете больше узнать об этом и загрузить его [здесь] (http://commons.apache.org/proper/commons-lang/). – Keppil

0

Улучшите проверку строк.

if (charismafpvalue != null && ! charismafpvalue.isEmpty()) { 
    // doSomething 
} 
0

Null не может быть преобразован в Float, так что вы в первую очередь необходимо проверить

 if(charismafpvalue !=null && charismafpvalue.getText().toString()!=null && !charismafpvalue.getText().equals("")) 

аналогично другим видом

0

Вы можете использовать

Float.valuOf(String s) 

который возвращает поплавка представление «s», если имеется, или поймать NPE, если «s» равна нулю. Как так:

try 
{ 
    float someFloat = Float.valueOf(someString); 
} 
catch(NumberFormatException nfe) 
{ 
} 
catch(NullPointerException npe) 
{ 
} 
finally {} 

Подробнее here

Конечно, это здесь для полноты картины на самом деле. Нулевая проверка всегда является победителем! И ответ Keppil очень хорош также :)

Надеется, что это помогает

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