Java 计算返回无穷大
Java calculation returning infinity
好久没在这里问问题了!
我正在制作一个 Android 应用程序,因此,当 运行 这段代码时遇到这个问题。:
Button calc = (Button) findViewById(R.id.btnCalculate);
calc.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
EditText number1 = (EditText) findViewById(R.id.dnp);
EditText number2 = (EditText) findViewById(R.id.ponte);
EditText number3 = (EditText) findViewById(R.id.aro);
EditText number4 = (EditText) findViewById(R.id.ed);
EditText number5 = (EditText) findViewById(R.id.esf);
EditText number6 = (EditText) findViewById(R.id.curvint);
EditText number7 = (EditText) findViewById(R.id.curvb);
EditText number8 = (EditText) findViewById(R.id.ind);
EditText number9 = (EditText) findViewById(R.id.espmin);
TextView display = (TextView) findViewById(R.id.display);
double dnp = Double.parseDouble(number1.getText().toString());
double ponte = Double.parseDouble(number2.getText().toString());
double aro = Double.parseDouble(number3.getText().toString());
double ed = Double.parseDouble(number4.getText().toString());
double esf = Double.parseDouble(number5.getText().toString());
double curvint = Double.parseDouble(number6.getText().toString());
double curvb = Double.parseDouble(number7.getText().toString());
double ind = Double.parseDouble(number8.getText().toString());
double espmin = Double.parseDouble(number9.getText().toString());
double R1;
double R2;
double DT; //Decentração total
double DM; //Decentração monocular
double diametro;
double S1;
double S2;
double espessurafinal;
if (esf < 0)
{
R1 = (ind - 1 / curvb) * 1000;
R2 = (ind - 1 / curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT / 2);
diametro = (ed + 2 * DM) / 2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = (S1 - S2) + espmin;
display.setText(espessurafinal + "" + "\nMilímetros");
}
else {
R1 = (ind - 1 / curvb) * 1000;
R2 = (ind - 1 / curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT / 2);
diametro = (ed + 2 * DM) / 2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = espmin - (S1 + S2);
display.setText(espessurafinal + "\nMilímetros");
}
}
});
我可能在这里遗漏了一些非常微不足道的东西,我的编码技能是
非常有限,但是当我按下计算按钮时,这段代码片段 returns "Infinity"。现在,我之前收到 NaN 并设法摆脱它,但只看到它变成无穷大!我研究并发现这是由于
一些数字除以 0,但我没有看到...
(哦,是的,我要确保输入的所有数字都不为 0)
可能只是我的编码把东西放在了错误的地方? (是的,我知道我可以通过使用函数和所有其他东西使代码变得更好......但我正在学习人,对我温柔点哈哈)。
或者,我的数学非常错误,返回的东西非常高?
先谢谢大家了!
似乎有些输入实际上不是数字,或者是数字和一些随机字符串的混合。通过检查输入是否为 Double 实例来对编辑文本值进行验证检查。 input instanceof Double
if( input instanceof Double) {
System.out.println("input is a Double");
}
在检查实例之前,请确保输入是干净的,编辑文本上只有 numerals.Run 一个 java 正则表达式 ^[0-9]*$
,如果为真,则只有数字输入,然后使用 Double.valueOf(val)
或 Double.parse()
唯一的区别是后者 returns 类型为 Double 的对象,而另一个只有 returns 原始类型。
好久没在这里问问题了! 我正在制作一个 Android 应用程序,因此,当 运行 这段代码时遇到这个问题。:
Button calc = (Button) findViewById(R.id.btnCalculate);
calc.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
EditText number1 = (EditText) findViewById(R.id.dnp);
EditText number2 = (EditText) findViewById(R.id.ponte);
EditText number3 = (EditText) findViewById(R.id.aro);
EditText number4 = (EditText) findViewById(R.id.ed);
EditText number5 = (EditText) findViewById(R.id.esf);
EditText number6 = (EditText) findViewById(R.id.curvint);
EditText number7 = (EditText) findViewById(R.id.curvb);
EditText number8 = (EditText) findViewById(R.id.ind);
EditText number9 = (EditText) findViewById(R.id.espmin);
TextView display = (TextView) findViewById(R.id.display);
double dnp = Double.parseDouble(number1.getText().toString());
double ponte = Double.parseDouble(number2.getText().toString());
double aro = Double.parseDouble(number3.getText().toString());
double ed = Double.parseDouble(number4.getText().toString());
double esf = Double.parseDouble(number5.getText().toString());
double curvint = Double.parseDouble(number6.getText().toString());
double curvb = Double.parseDouble(number7.getText().toString());
double ind = Double.parseDouble(number8.getText().toString());
double espmin = Double.parseDouble(number9.getText().toString());
double R1;
double R2;
double DT; //Decentração total
double DM; //Decentração monocular
double diametro;
double S1;
double S2;
double espessurafinal;
if (esf < 0)
{
R1 = (ind - 1 / curvb) * 1000;
R2 = (ind - 1 / curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT / 2);
diametro = (ed + 2 * DM) / 2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = (S1 - S2) + espmin;
display.setText(espessurafinal + "" + "\nMilímetros");
}
else {
R1 = (ind - 1 / curvb) * 1000;
R2 = (ind - 1 / curvint) * 1000;
DT = (aro+ponte)-dnp;
DM = (DT / 2);
diametro = (ed + 2 * DM) / 2;
S1 = R1 - (Math.sqrt(Math.exp(R1)-Math.exp(diametro)));
S2 = R2 - (Math.sqrt(Math.exp(R2)-Math.exp(diametro)));
espessurafinal = espmin - (S1 + S2);
display.setText(espessurafinal + "\nMilímetros");
}
}
});
我可能在这里遗漏了一些非常微不足道的东西,我的编码技能是 非常有限,但是当我按下计算按钮时,这段代码片段 returns "Infinity"。现在,我之前收到 NaN 并设法摆脱它,但只看到它变成无穷大!我研究并发现这是由于 一些数字除以 0,但我没有看到... (哦,是的,我要确保输入的所有数字都不为 0)
可能只是我的编码把东西放在了错误的地方? (是的,我知道我可以通过使用函数和所有其他东西使代码变得更好......但我正在学习人,对我温柔点哈哈)。
或者,我的数学非常错误,返回的东西非常高?
先谢谢大家了!
似乎有些输入实际上不是数字,或者是数字和一些随机字符串的混合。通过检查输入是否为 Double 实例来对编辑文本值进行验证检查。 input instanceof Double
if( input instanceof Double) {
System.out.println("input is a Double");
}
在检查实例之前,请确保输入是干净的,编辑文本上只有 numerals.Run 一个 java 正则表达式 ^[0-9]*$
,如果为真,则只有数字输入,然后使用 Double.valueOf(val)
或 Double.parse()
唯一的区别是后者 returns 类型为 Double 的对象,而另一个只有 returns 原始类型。