问题描述
我使用editTexts实时计算一些值,所以我使用textWatcher:
@Override
public void afterTextChanged(Editable s) {
if (editTextNumer1.hasFocus()) {
if (s.length() != 0) {
number1 = Float.parseFloat(editTextNumber1.getText().toString());
number2 = (float) (number1 * 1.66));
number3 = (float) (number1 + 23.175);
}
editTextNumber2.setText(String.format(Locale.getDefault(),"%.3f",number2));
editTextNumber3.setText(String.format(Locale.getDefault(),number3));
.
.
.
我也需要使用负值,我知道我无法解析“-”符号,这就是在键盘上按下“-”后应用程序崩溃的原因。 只是无法找到解决方法。 有人可以帮忙吗? 谢谢
解决方法
您不能将“-”符号解析为整数/浮点数,因为它是字符。
您可以做的是检查字符串中的第一个字符,并检查它是否包含“-”符号或只是一个数字。
@Override
public void afterTextChanged(Editable s) {
if (editTextNumer1.hasFocus()) {
if (s.toString().length() != 0) {
float number1 =0f;
int text_size = editTextNumber1.getText().toString().length();
if (s.toString().substring(0,1).equals("-")){
number1 = Float.parseFloat(editTextNumber1.getText().toString().substring(1,text_size-1));
}else{
number1 = Float.parseFloat(editTextNumber1.getText().toString());
}
float number2 = (float) (number1 * 1.66));
float number3 = (float) (number1 + 23.175);
editTextNumber2.setText(String.format(Locale.getDefault(),"%.3f",number2));
editTextNumber3.setText(String.format(Locale.getDefault(),number3));
}
}
...
}
,
I found the solution that works for me:
@Override
public void afterTextChanged(Editable s) {
if (editTextNumber1.hasFocus()) {
if (s.length() != 0) {
String first = editTextNumber1.getText().toString();
if (first.equals("-")) {
//do nothing,or whatever
}
else {
number1 = Float.parseFloat(editTextNumber1.getText().toString());
number2 = (float) (number1 * 1.66);
number3 = (float) (number1 + 23.175);
editTextNumber2.setText(String.format(Locale.getDefault(),number2));
editTextNumber3.setText(String.format(Locale.getDefault(),number3));
}
基本上,只要它传递字符串中的第一个字符,“-”符号就不再有问题。效劳于 ”。”也有小数点。