IF оператор не работает с TextWatcher

Мой код выглядит простым, и я не знаю, в чем проблема. Если я кодирую что-то вроде этого:

tvResult.setText(sum+ "RUB");

это показывает правильные числа. Но если я попытаюсь добавить оператор IF следующим образом:

if(sum>=114000) {
                    tvResult.setText(sum + " RUB");
                }

и сумма равна, скажем, 1000000, это показывает странное число: 1111111.0. Нужен ваш совет =) Заранее спасибо

Вот код XML:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:id="@+id/tvCash"
        android:layout_below="@id/tvCalculate"
        android:hint="@string/cash_money"
        android:background="@drawable/zakat_red"
        android:layout_marginTop="20dp"/>

    <EditText
        android:layout_width="130dp"
        android:layout_height="40dp"
        android:id="@+id/etCash"
       android:inputType="numberDecimal"
        android:layout_above="@+id/tvBank"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:hint="@string/hint_zakat"
        android:gravity="end"
        android:imeOptions="actionDone"/>

И Java-код:

TextWatcher twCash=new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                tvCash.setBackgroundResource(R.drawable.zakat_green);
                sum+=Float.valueOf(etCash.getText().toString());
                if(sum>=114000) {
                    tvResult.setText(sum + " RUB");
                }
            }
        };

2 ответа

Решение

Есть проблема с вашей логикой. Как вы используете TextWatcher, чтобы вычислить сумму всех чисел, введенных в вашем editText, даже если вы введете "." после любого числа, afterTextChanged() вызовется, а затем добавит это число к общей сумме. Допустим, вы последовательно вводите следующие символы: 2, 3, ., 4, 7 Тогда вы получите сумму = 94,87 И я думаю, что это неправильный способ вычисления суммы введенных чисел. Вы должны исправить свою логику, чтобы получить желаемый результат.

".0", скорее всего, появится, потому что переменная суммы - это число с плавающей точкой или что-то в этом роде Вы должны либо использовать int для переменной sum, либо вы должны привести его к int, когда вы его отображаете. Это должно работать.

if (sum >= 114000) {
    tvResult.setText((int)sum + " RUB");
}

Если вам нужно, чтобы она была суммой и показывала значения после десятичной дроби, если они не равны нулю, вам нужно написать метод для анализа значения, чтобы вернуть то, что вы хотите.

Другие вопросы по тегам