我正在尝试仅使用文本框制作一个简单的计算器。 我认为我的代码是正确的,但结果几乎总是错误的。
这是代码:
void TextBoxPercorsoTextChanged(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(textBoxPercorso.Text) && !string.IsNullOrEmpty(textBoxAgilitySmallVelocita.Text))
textBoxAgilitySmallTps.Text=(Convert.ToDecimal(textBoxPercorso.Text)/Convert.ToDecimal(textBoxAgilitySmallVelocita.Text)).ToString();
}
void TextBoxAgilitySmallVelocitaTextChanged(object sender, EventArgs e)
{
if(!string.IsNullOrEmpty(textBoxPercorso.Text) && !string.IsNullOrEmpty(textBoxAgilitySmallVelocita.Text))
textBoxAgilitySmallTps.Text=(Convert.ToDecimal(textBoxPercorso.Text)/Convert.ToDecimal(textBoxAgilitySmallVelocita.Text)).ToString();
}
我试过做一些尝试。例如,我试图做10/5,但结果是0.5。仅使用10/10,结果是正确的。
请帮帮我吗?
答案 0 :(得分:0)
尝试避免魔术按钮反模式(提取方法);不要重复自己(复制+粘贴):
private void ComputeSmallTps() {
decimal perCorso;
decimal smallVelocita;
// first, parse arguments...
if (!decimal.TryParse(textBoxPercorso.Text, out perCorso) ||
!decimal.TryParse(textBoxAgilitySmallVelocita.Text, out smallVelocita)) {
// invalid input data, e.g. "bla-bla-bla"
textBoxAgilitySmallTps.Text = "???";
return;
}
try {
// ...then compute: put the right formula here
// put break point here, check smallVelocita and perCorso values
decimal result = smallVelocita / perCorso;
textBoxAgilitySmallTps.Text = result.ToString();
}
catch (ArithmeticException) {
// Division by zero, overflow
textBoxAgilitySmallTps.Text = "???";
}
}
...
void TextBoxPercorsoTextChanged(object sender, EventArgs e) {
// Just a simple call, no complex logic here
ComputeSmallTps();
}
void TextBoxAgilitySmallVelocitaTextChanged(object sender, EventArgs e) {
ComputeSmallTps();
}