IF 语句不适用于 TextWatcher
IF statement doesn't work with 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”,因为 sum 变量是浮点数之类的。您应该为变量 sum 使用 int,或者在显示它时将其转换为 int。这应该有效。
if (sum >= 114000) {
tvResult.setText((int)sum + " RUB");
}
如果您需要它是一个总和并且只显示小数点后不为零的值,您需要编写一个方法来将值解析为您想要的 return。
你的逻辑有问题。当您使用 TextWatcher
来计算您在 editText
中输入的所有数字的总和时,即使您键入“.”也是如此。在任何数字之后,afterTextChanged()
将被调用,然后它将那个数字添加到聚合的 sum.So 中,比方说,您连续输入以下字符:2、3、。 , 4 , 7
然后你会得到总和 = 94.87
我想这不是计算输入数字总和的正确方法。
您必须纠正您的逻辑才能获得所需的输出。
我的代码看起来很简单,不知道哪里出了问题。如果我编写这样的代码:
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”,因为 sum 变量是浮点数之类的。您应该为变量 sum 使用 int,或者在显示它时将其转换为 int。这应该有效。
if (sum >= 114000) {
tvResult.setText((int)sum + " RUB");
}
如果您需要它是一个总和并且只显示小数点后不为零的值,您需要编写一个方法来将值解析为您想要的 return。
你的逻辑有问题。当您使用 TextWatcher
来计算您在 editText
中输入的所有数字的总和时,即使您键入“.”也是如此。在任何数字之后,afterTextChanged()
将被调用,然后它将那个数字添加到聚合的 sum.So 中,比方说,您连续输入以下字符:2、3、。 , 4 , 7
然后你会得到总和 = 94.87
我想这不是计算输入数字总和的正确方法。
您必须纠正您的逻辑才能获得所需的输出。