c#计算器奇怪的现像

shamingguazi 2010-07-05 08:05:14

主要方法


private void btnCalculate_Click(object sender, EventArgs e)
{
if (this.txtFirst.Text==""||this.txtSecond.Text==""||this.cboOperator.Text=="")
{
MessageBox.Show("操作数或运算符不能为空","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
double firstNum = double.Parse(this.txtFirst.Text);
double secondNum = double.Parse(this.txtSecond.Text);
string operate = this.cboOperator.Text;
if (secondNum == 0 && operate == "/")
{
MessageBox.Show("除数不能为0,请重新输入!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
this.txtResult.Text = Calculate(firstNum, secondNum, operate).ToString();
}
}

public double Calculate(double firstNum, double secondNum, string operate)
{
if (operate == "+")
{
return firstNum + secondNum;
}
else if (operate == "-")
{
return firstNum - secondNum;
}
else if (operate == "*")
{
return firstNum * secondNum;
}
else
{
return firstNum / secondNum;
}
}


当输入5.05 - 5 时结果是0.0499999999999998 ,而不是5.00

感兴趣的朋友也可以到 http://download.csdn.net/source/2516203 下载来看看,谢谢大家
...全文
119 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
幻想多巴胺 2010-07-05
  • 打赏
  • 举报
回复
angel6709 2010-07-05
  • 打赏
  • 举报
回复
int,float ,double...二进制存储的,除了2的幂外进行十进制的小数运算就会有精度丢失,
shamingguazi 2010-07-05
  • 打赏
  • 举报
回复
写错了,是0.05,谢谢大家,我试下,不过double类型为什么出现这种情况呢
乐居猫 2010-07-05
  • 打赏
  • 举报
回复
学习了!!
camperer 2010-07-05
  • 打赏
  • 举报
回复

每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
gxingmin 2010-07-05
  • 打赏
  • 举报
回复
double 类型精度问题
就如比较double类型是否为0一样,要允许一定的误差
if(Math.Abs(dblValue)<0.000001)
{
MessageBox.Show("dblValue=0");
}
else
{
MessageBox.Show("dblValue!=0");

}
wuyi8808 2010-07-05
  • 打赏
  • 举报
回复
        private void btnCalculate_Click(object sender, EventArgs e)
{
if (this.txtFirst.Text==""||this.txtSecond.Text==""||this.cboOperator.Text=="")
{
MessageBox.Show("操作数或运算符不能为空","操作提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
decimal firstNum = decimal.Parse(this.txtFirst.Text);
decimal secondNum = decimal.Parse(this.txtSecond.Text);
string operate = this.cboOperator.Text;
if (secondNum == 0 && operate == "/")
{
MessageBox.Show("除数不能为0,请重新输入!", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
this.txtResult.Text = Calculate(firstNum, secondNum, operate).ToString();
}
}

public decimal Calculate(decimal firstNum, decimal secondNum, string operate)
{
if (operate == "+")
{
return firstNum + secondNum;
}
else if (operate == "-")
{
return firstNum - secondNum;
}
else if (operate == "*")
{
return firstNum * secondNum;
}
else
{
return firstNum / secondNum;
}
}



wuyi8808 2010-07-05
  • 打赏
  • 举报
回复
decimal,笔误。
wuyi8808 2010-07-05
  • 打赏
  • 举报
回复
把 double 改为 deciaml 就没问题了。

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧