2016-03-09 89 views
1

我的代碼看起來很簡單,我不知道是什麼問題。如果我的代碼是這樣的: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"); 
       } 
      } 
     }; 
+0

你的意思是說,如果你刪除if(sum> = 114000),那麼你在'tvResult'中看不到小數? –

+0

沒有。如果我刪除if(sum> = 114000),那麼它顯示正確的數字。但我需要這個聲明以備將來使用。用這個聲明它顯示不正確的數字。如果總和== 1000000,那就說明總和== 1111111 – lememele

回答

0

你的邏輯有問題。在使用TextWatcher時,即使您輸入'。',計算輸入到editText中的所有數字的總和。在任何數字後,afterTextChanged()將被調用,然後它會將該數字添加到聚合總和。所以,假設您連續輸入以下字符:2,3,。 ,4,7 然後你會得到總和= 94.87 我想這不是計算輸入數字總和的正確方法。 你必須糾正你的邏輯來獲得所需的輸出。

+0

對不起,不明白=)變量調用sum,但在這個例子中它沒有做任何補充(它會提前,我簡化了這個例子,因爲問題不在計算中,它在IF語句中)。我只想在tvResult上顯示輸入數字,如果它超過114000.當我輸入1000000時,如果我使用IF語句顯示1111111,並且如果我不使用它,則顯示正確的數字。 IF語句改變了一些東西... – lememele

+0

請在if條件之前和if條件之內添加日誌 - Log.d(「debug」,「SUM ::」+ sum);並檢查它們是否描繪相同的值或不同。 –

+0

是的,它不同。它爲每個輸入數字添加一個額外的1)=)我理解你對聚合的看法。似乎問題不在IF聲明中,我誤解了如何使用TextWatcher =)感謝您的幫助! – lememele

0

的」 .0" 是最有可能來了,因爲總和變量是一個浮動或什麼的。您應該爲變量總和使用int,或者在顯示時將其轉換爲int。這應該工作。

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

如果你需要它是一個總和,只有小數點後顯示的值,如果他們不爲零,你需要寫解析值來返回你想要什麼樣的方法。

+0

現在它顯示1111111,沒有.0 =)而不是1000000 – lememele

相關問題