我一直在为大部分时间而努力工作,我似乎无法使这部分代码工作.代码的目的是允许用户输入一组值以计算缺失值.作为附加功能,我在表单上放置了一个CheckBox,以允许用户进行进一步的计算.这就是我的问题所在.我知道代码有效,因为如果我更改公式,tb3_aic.Text中显示的值会根据公式进行更改.但是,当我使用下面的答案时,答案并没有像它应该的那样改变.请参考附带的代码.如果公式需要jpg图像,我可以通过电子邮件发送.
void Calc3Click(object sender, EventArgs e) { if (String.IsNullOrEmpty(tb3_skv.Text) | String.IsNullOrEmpty(tb3_kva.Text) | String.IsNullOrEmpty(tb3_z.Text)) { MessageBox.Show("Enter all required values", "Missing Data", MessageBoxButtons.OK); } //If user does not enter all the values required for the calculation show error message box else { if (!String.IsNullOrEmpty(tb3_skv.Text) & !String.IsNullOrEmpty(tb3_kva.Text) & !String.IsNullOrEmpty(tb3_z.Text)) { //If motor load check box is not checked and required values are entered calculate AIC based on formula. int y; decimal x, z, a; x = decimal.Parse(tb3_skv.Text); y = int.Parse(tb3_kva.Text); a = decimal.Parse(tb3_z.Text); z = (y * 1000) / (x * 1.732050808m) / (a / 100); //the m at the end of the decimal allows for the multiplication of decimals tb3_aic.Text = z.ToString(); tb3_aic.Text = Math.Round(z,0).ToString(); } if (cb3_ml.Checked==true) {//If Motor Load CB is checked calculate the following int y, b; decimal x, z, a; x = decimal.Parse(tb3_skv.Text); y = int.Parse(tb3_kva.Text); a = decimal.Parse(tb3_z.Text); b = int.Parse(tb3_ml.Text); z = ((y * 1000) / (x * 1.732050808m) / (a / 100))+((b / 100)*(6*y)/(x*1.732050808m)*1000); tb3_aic.Text = z.ToString(); tb3_aic.Text = Math.Round(z,5).ToString(); } }
我很感激可以提供任何帮助.
谢谢Greg Rutledge
如果不知道问题是什么,有些事情看起来有点奇怪:
此外,在计算中混合使用decimal和int可能会导致意外结果,除非您确实知道自己在做什么.我建议只使用小数(或双精度,这种方式更快,通常具有足够的精度用于工程计算).
你也设置了两次tb3_aic.Text,我假设你决定稍后舍入并忘记删除第一个.
编辑:这在C#中显然是错误的:
你在if子句中使用逐位AND(&),你可能意味着逻辑AND(&&).
当与布尔操作数一起使用时,它们之间的唯一区别是&&短路(如果左边是假,则不评估右操作数).我学到了一些东西,谢谢大家评论.:)