C++ 多个数据求和如何计算呢,比如30个数据求和

请教下大家:
我需要对A1,A2,A3...A30这30个数求和,但这样求和结果却不对
double =A1+A2+...A30

double 类型数据不能直接判断是否等于0.
一般这么判断:
#include

if( fabs(Dlg.m_strX1)<0.0001 && fabs(Dlg.m_stru1)<0.0001 ) A1=0;
else A1=1;

把你的代码贴出来看看。
要定义一个变量。
double re;
re=A1+A2+...A30;

谢谢指教,代码如下:

double A1,A2,A3,...A30;

if (Dlg.m_strX1 == 0 && Dlg.m_stru1 == 0) //m_strX1 、m_stru1为MFC对话框中输入的值,定义为double
{
A1 = 0;//计数用
}
else
{
A1 = 1;
}
//--------------------------------------
if (Dlg.m_strX2 == 0 && Dlg.m_stru2 == 0)
{
A2 = 0;

        else
        {
        A2=1;
        }

    ... ...

        if (Dlg.m_strX30 == 0 && Dlg.m_stru30 == 0)
        {
            A30 = 0;
        }
        else
        {
            A30 = 1;
        }


        double jisuansum=A1+A2+A3+...A30;

当输入小数时计算出错,输入整数时则结果正确!

30个数,怎么不用数组?
double A[30];
你不贴全了,也不知道你错哪里了。你怎么判断不对的?
编译通过了?

double 类型数据不能直接判断是否等于0.
一般这么判断:



#include <math.n>

if( fabs(Dlg.m_strX1)<0.0001 && fabs(Dlg.m_stru1)<0.0001 ) A1=0;
else A1=1;

可以用数组的吧……double A【50】

非常感谢ysuwood及大家的指教,我是兴趣爱好者,为了工作方便有时会自己折腾下,谢谢大家!按照ysuwood的方法初试了3组数据ok,明天再全部重新修改后试试。

当加和数达到11时,又出现了那个怪现象哟,求助啦!
CAddJunDlg 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;
        //2.定义
        double B1, B2, B3, B4, B5, B6, B7, B8, B9, B10, B11, B12, B13, B14, B15,
            B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, B30;
        //3.定义
        double C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15,
            C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29, C30;
        //4.定义
        double D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15,
            D16, D17, D18, D19, D20, D21, D22, D23, D24, D25, D26, D27, D28, D29, D30;


        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;

        //计数值n,即试样的个数-------------------------------------------------
        double jishuzhi;
        jishuzhi = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 +A11;

        float aa = (float)jishuzhi;
        char  cc[20];
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji)->SetWindowText(cc);

请教下ysuwood,数组计算能给个代码吗?谢谢!

输入整数正确
图片说明

输入整数正确,输入小数错误
图片说明
图片说明

如果你的编辑框ID是按+1的顺序,那就好处理:

    UINT ID=IDC_EDIT1;
    double A[30],sum;
    char buf[50];

    UpdateData(true);
    sum=0;
    for(int i=0; i<30; i++)
    {
        GetDlgItemText( ID+i, buf, 49 );
        A[i]=atof(buf);
        sum+=A[i];
    }

如果不是顺序来的:

    UINT ID[i]={IDC_EDIT1,IDC_EDIT12,...,IDC_EDIT30} ;
    double A[30],sum;
    char buf[50];

    UpdateData(true);
    sum=0;
    for(int i=0; i<2; i++)
    {
        GetDlgItemText(ID[i],buf,49);
        A[i]=atof(buf);
        sum+=A[i];
    }

ysuwood,非常感谢!不过运行时有如下提示,当如何处理啊,谢谢!
图片说明

Dear ysuwood,毛病出在哪儿呢?单独显示if else的数据是对的,没输入为零,输入为1,可输入整数显示的计数和是对的,输入小数后显示的计数却是错的,即便和是错误的,但显示出来的单个计数值也是对的

Dear ysuwood,请看这里,我将数据全部显示出来,出现如下情况
图片说明

问题的关键是输入小数就出错,整数却是ok的

从目前的状况看,问题出在判断上,不能输入小数,就是判断为零或为1的问题上,输入整数的判断是ok的,输入小数的判断就是错误的
CAddJunDlg Dlg;
if (IDOK == Dlg.DoModal())
{
UpdateData();

        //1.定义计数值
    int A1;
    int A2;
    int A3;
    int A4;
    int A5;
    int A6;
    int A7;
    int A8;
    int A9;
    int A10;
    int A11;
    ///上面的int 改为long、doube都出现相同的现象,貌似跟这里没关系样

    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 = 1;

        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;

        //计数值n,即试样的个数-------------------------------------------------
        double jishuzhi;
        jishuzhi = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 +A11;

    //以下是显示数据部分
    float aa = (float)jishuzhi;
        char  cc[20];
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji)->SetWindowText(cc);

        aa = (float)A1;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji6)->SetWindowText(cc);

        aa = (float)A2;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji7)->SetWindowText(cc);
        aa = (float)A3;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji8)->SetWindowText(cc);
        aa = (float)A4;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji9)->SetWindowText(cc);
        aa = (float)A5;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji10)->SetWindowText(cc);
        aa = (float)A6;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji11)->SetWindowText(cc);
        aa = (float)A7;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji12)->SetWindowText(cc);
        aa = (float)A8;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji13)->SetWindowText(cc);
        aa = (float)A9;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji14)->SetWindowText(cc);
        aa = (float)A10;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji15)->SetWindowText(cc);
        aa = (float)A11;
        sprintf_s(cc, "%.2f", aa);
        GetDlgItem(IDC_STATICji16)->SetWindowText(cc);

这样干,还是不行!
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;