问题描述
- C++ double 变量与if 条件判断出错
-
大家好,请教下:if else 判断时出错不知何故,输入整数时是ok的,输入小数时却是错误的,不知问题出在哪儿,大家帮我指点指点
Dlg.m_strX1输入框的数据类型doubleCAddJunDlg Dlg;
if (IDOK == Dlg.DoModal())
{
UpdateData();
//1.定义计数值
double A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14, A15,
A16, A17, A18, A19, A20, A21, A22, A23, A24, A25, A26, A27, A28, A29, A30;const float EPSINON = 0.00001;
if (fabs(Dlg.m_strX1) >= -EPSINON && fabs(Dlg.m_strX1) <= EPSINON)A1 = 0;//这种情况下判断等于零else A1 = 1;
if (fabs(Dlg.m_strX2) >= -EPSINON && fabs(Dlg.m_strX2) <= EPSINON)A2 = 0;//这种情况下判断等于零else A2 = 1;
if (fabs(Dlg.m_strX3) >= -EPSINON && fabs(Dlg.m_strX3) <= EPSINON)A3 = 0;//这种情况下判断等于零else A3 = 1;
if (fabs(Dlg.m_strX4) >= -EPSINON && fabs(Dlg.m_strX4) <= EPSINON)A4 = 0;//这种情况下判断等于零else A4 = 1;
if (fabs(Dlg.m_strX5) >= -EPSINON && fabs(Dlg.m_strX5) <= EPSINON)A5 = 0;//这种情况下判断等于零
else A5 = 1;
if (fabs(Dlg.m_strX6) >= -EPSINON && fabs(Dlg.m_strX6) <= EPSINON)A6 = 0;//这种情况下判断等于零else A6 = 1;
if (fabs(Dlg.m_strX7) >= -EPSINON && fabs(Dlg.m_strX7) <= EPSINON)A7 = 0;//这种情况下判断等于零
else A7 = 1;
if (fabs(Dlg.m_strX8) >= -EPSINON && fabs(Dlg.m_strX8) <= EPSINON)A8 = 0;//这种情况下判断等于零else A8 = 1;
if (fabs(Dlg.m_strX9) >= -EPSINON && fabs(Dlg.m_strX9) <= EPSINON)A9 = 0;//这种情况下判断等于零else A9 = 1;
if (fabs(Dlg.m_strX10) >= -EPSINON && fabs(Dlg.m_strX10) <= EPSINON)A10 = 0;//这种情况下判断等于零
else A10 = 1;
if (fabs(Dlg.m_strX11) >= -EPSINON && fabs(Dlg.m_strX11) <= EPSINON)A11 = 0;//这种情况下判断等于零else A11 = 1;
解决方案
解决方案二:
直接打印一下出来看你输入的数据和程序获取的数据,if 怎么判断的
解决方案三:
代码有不少垃圾:
fabs(Dlg.m_strX1) >= -EPSINON
这个条件永远都是TRUE
解决方案四:
你先看看运算符的优先级,在看看你的判断表达式是不是按你的意思计算的。
解决方案五:
楼上可否帮我修改下代码啊,谢谢!
解决方案六:
也做过这样的测试,仍然不行
if (fabs(Dlg.m_strX1) < 0.0001 && fabs(Dlg.m_stru1) < 0.0001) A1 = 0;//
else A1 = 1;
if (fabs(Dlg.m_strX2) < 0.0001 && fabs(Dlg.m_stru2) < 0.0001) A2 = 0;
else A2 = 1;
if (fabs(Dlg.m_strX3) < 0.0001 && fabs(Dlg.m_stru3) < 0.0001) A3 = 0;
else A3 = 1;
if (fabs(Dlg.m_strX4) < 0.0001 && fabs(Dlg.m_stru4) < 0.0001) A4 = 0;
else A4 = 1;
if (fabs(Dlg.m_strX5) < 0.0001 && fabs(Dlg.m_stru5) < 0.0001) A5 = 0;
else A5 = 1;
if (fabs(Dlg.m_strX6) < 0.0001 && fabs(Dlg.m_stru6) < 0.0001) A6 = 0;
else A6 = 1;
if (fabs(Dlg.m_strX7) < 0.0001 && fabs(Dlg.m_stru7) < 0.0001) A7 = 0;
else A7 = 7;
if (fabs(Dlg.m_strX8) < 0.0001 && fabs(Dlg.m_stru8) < 0.0001) A8 = 0;
else A8 = 1;
if (fabs(Dlg.m_strX9) < 0.0001 && fabs(Dlg.m_stru9) < 0.0001) A9 = 0;
else A9 = 1;
if (fabs(Dlg.m_strX10) < 0.0001 && fabs(Dlg.m_stru10) < 0.0001) A10 = 0;
else A10 = 1;
if (fabs(Dlg.m_strX11) < 0.0001 && fabs(Dlg.m_stru11) < 0.0001) A11 = 0;
else A11 = 1;
解决方案七:
。。还没调好呢。。
你下面贴的代码有笔误:
else A7 = 7;
象这种小错误,如果你不把代码贴全了,很难找到哪里出错了。
1、 m_strX1、m_stru1等是不是都是double类型?
2、你用的变量太多,稍不留意就会出错。认真查查。
如果你代码不涉及保密,可以发给我,我帮你看看。
解决方案八:
好啊,留个邮箱给我吧,我是vs2015编译的,谢谢!
解决方案九:
都以为您没时间看了!
解决方案十:
m_strX1、m_stru1等都是double类型,想做的事情很简单的,就是有数据输入时就计数为1,反之则计数为零,因为后续平均值计算时,会用到这个计数值;或是有更好的处理方式?比如我输入了10组数据,平均值时就除以10,输入了20组数据求平均值时就除以20.