gpt4 book ai didi

当输入等于 ""时,Android EditText 处理 String.valueOf(double) 总是给出 NaN

转载 作者:行者123 更新时间:2023-11-29 15:51:43 24 4
gpt4 key购买 nike

有 3 个 EditText,第一个价格输入,第二个百分比,第三个结果。我正在尝试使用 onFocusChangeListener 计算 EditText 输入。代码:

etPercen.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {

if (!hasFocus) {
OnFocusChangedPercenCalculator();
}
}
});

etresult.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {

if (!hasFocus) {
OnFocusChangedResultCalculator();
}
}
});

public void OnFocusChangedPercenCalculator() {
String text1 = String.valueOf(etPrice.getNumericValue()).toString();
String text2 = etPercen.getText().toString();
String text3 = String.valueOf(etresult.getNumericValue()).toString();
double input1 = 0;
double input2 = 0;
int i = 0;
if (text1.length() > 0 || text2.length() > 0 || text3.length() > 0)
input1 = Double.parseDouble(text1);
input2 = Double.parseDouble(text2);

if (text1.length() != 0 ){
if(text2.length() != 0) {
double output = (input1 * input2) / 100;
e = String.valueOf(output);
etresult.setText("" + e);
} else if (text2.length() ==0 || text2.matches("")){
etresult.setText(i+"");
}
}else if(text1.length() == 0){
if(text2.length() != 0) {
etresult.setText(i+"");
} else if (text2.length() ==0 || text2.matches("")){
etresult.setText(i+"");
}
}
}

public void OnFocusChangedResultCalculator() {
String text1 = String.valueOf(etPrice.getNumericValue()).toString();
String text2 = etPercen.getText().toString();
String text3 = String.valueOf(etresult.getNumericValue()).toString();
double input1 = 0;
double input3 = 0;
int i = 0;
if (text1.length() > 0 || text2.length() > 0 || text3.length() > 0)
input1 = Double.parseDouble(text1);
input3 = Double.parseDouble(text3);

if (text1.length() != 0 ){
if(text3.length() != 0) {
double output = (input3 / input1) * 100;
e = String.valueOf(output);
etPercen.setText("" + e);
} else if (text3.length() ==0 || text3.matches("")){
etPercen.setText(i);
}
}else if(text1.length() == 0){
if(text3.length() != 0) {
etPercen.setText(i);
} else if (text3.length() ==0 || text3.matches("")){
etPercen.setText(i);
}
}else if (input3 > input1){
etPercen.setText(100);
}
}

我想要做的是第二个和第三个 EditTexts 互相看。我的意思是当用户从第二个/第三个 editText 改变焦点时,计算将立即开始。这个想法是让第 2 个计算并将结果放在第 3 个,让第 3 个计算并将结果放在第 2 个。这取决于用户是否想要更改填充/更改值(假设价格是 10000,用户想知道它的 20% 是多少,或者用户想要相反的方式,它的 % 是多少20000 从 10000)。这是我的期望,但是当我们清空第一个和第三个 edittext 时,第二个的输出将是 NaN。如何处理?我的意思是避免结果变成 NaN?

最佳答案

好的,我重构了第二种方法来说明我在说什么。应该有效。

      public void OnFocusChangedResultCalculator() {
String text1 = etPrice.getText().toString().trim();
String text2 = etPercen.getText().toString().trim();
String text3 = etresult.getText().toString().trim();
double input1 = text1.length()>0 ? Double.parseDouble(text1) : 0;
double input3 = text3.length()>0 ? Double.parseDouble(text3) : 0;

if (input3 > input1){
etPercen.setText(100);
return;
}

double output = (input3 / input1) * 100;
etPercen.setText(output);
}

更新

public void OnFocusChangedResultCalculator() {
String text1 = String.valueOf(etPrice.getNumericValue()).toString().trim();
String text2 = etPercen.getText().toString().trim();
String text3 = String.valueOf(etresult.getNumericValue()).toString().trim();
double input1 = text1.length()>0 ? Double.parseDouble(text1) : 0;
double input3 = text3.length()>0 ? Double.parseDouble(text3) : 0;

if (input3 > input1){
etPercen.setText(Integer.toString(100));
etresult.setText(Double.toString(input1));
return;
}

double output = (input3 / input1) * 100;
etPercen.setText(Double.toString(output));
}

关于当输入等于 ""时,Android EditText 处理 String.valueOf(double) 总是给出 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29665583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com