#android
#Android
Вопрос:
Я использую следующий код для разбора значения с плавающей запятой из строки:
EditText CurrPLC = (EditText) findViewById(R.id.CurrPLC);
String s5 = CurrPLC.getText().toString();
float F5 = Float.parseFloat(s5);
Это отлично работает, пока я не попытаюсь записать отрицательное значение в EditText
. Поскольку символ «минус» находится на той же кнопке, что и десятичная точка, я сначала записываю десятичную дробь, а затем приложение вылетает, потому что строка «.» не может быть преобразована в значение с плавающей запятой. Код выполняется при любом изменении текста в EditText
Вот EditText
код из файла макета:
<EditText
android:id="@ id/CurrPLC"
android:layout_width="100dp"
android:layout_height="30dp"
android:padding="2dp"
android:hint="eg. 3277"
android:gravity="center_horizontal"
android:layout_gravity="right"
android:textSize="13sp"
android:digits="-0123456789."
android:inputType="numberSigned|numberDecimal"
android:maxLength="10"
android:background="@drawable/plc_edit_text_holo_light"
android:layout_marginRight="19dp"
android:layout_marginEnd="19dp"
android:layout_alignBaseline="@ id/CurrPLCLabel"
android:layout_alignBottom="@ id/CurrPLCLabel"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
/>
Я что-то сделал не так, или это просто обработка этого до возникновения ошибки?
Спасибо
Комментарии:
1. В какой момент вы анализируете значение с плавающей запятой? Вы используете
TextWatcher
или при нажатии кнопки? Я не понимаю, что вы имеете в виду подthe "negative" symbol is on the same button as the decimal point
2. @AbtinGramian Да, я использую
TextWatcher
, поэтому он обновляется при каждом нажатии клавиши. Чтобы поместить «отрицательный» символ (-) на ту же кнопку, что и десятичная точка, вы должны дважды нажать кнопку с десятичной запятой. Это просто стандартная цифровая клавиатура Android
Ответ №1:
Основываясь на вашем комментарии об использовании TextWatcher
, которое пыталось бы анализировать значение с плавающей запятой при каждом нажатии клавиши, проблема не в отрицательных числах.
parseFloat()
будет нормально работать с отрицательными числами. Проблема в пустой строке или -
, -.
или .
, скорее всего.
Поэтому вы не должны выполнять синтаксический анализ при каждом нажатии клавиши, а вместо этого делайте это только там, где вам это нужно (я не уверен в вашем полном варианте использования, поэтому я не могу прокомментировать подходящее время и место для разбора float). В противном случае вам нужно добавить try
/ catch
для java.lang.NumberFormatException
везде, где вы в данный момент анализируете значение с плавающей запятой.