注册 登录
编程论坛 C++教室

有一道经济题目,需要精确到小数点后两位,求高手

qq872551969 发布于 2012-08-18 15:34, 1622 次点击
#include<stdio.h>
int main()
{
    int Aa,Ab,Ac,Ba,Bb,Bc,Ca,Cb,Cc,Da,Db,Dc,Ea,Eb,Ec,Fa,Fb,Fc,Gc,Gd,Ge,H,I,J,K,L;
    Gc=1;
    J=1;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Aa,&Ab,&Ac);
    Gd=Aa+Ab+Ac;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Gc++;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Ba,&Bb,&Bc);
    Gd=Ba+Bb+Bc;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Gc++;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Ca,&Cb,&Cc);
    Gd=Ca+Cb+Cc;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Gc++;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Da,&Db,&Dc);
    Gd=Da+Db+Dc;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Gc++;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Ea,&Eb,&Ec);
    Gd=Ea+Eb+Ec;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Gc++;
    printf("请输入第%d天早、中、晚的数额(中间以“,”隔开):",Gc);
    scanf("%d,%d,%d",&Fa,&Fb,&Fc);
    Gd=Fa+Fb+Fc;
    printf("第%d天消费额度为:%d\n",Gc,Gd);
    Ge=Aa+Ab+Ac+Ba+Bb+Bc+Ca+Cb+Cc+Da+Db+Dc+Ea+Eb+Ec+Fa+Fb+Fc;
    printf("总消费额度为:%d\n",Ge);
    printf("有多少人吃饭?请输入:");
    scanf("%d",&H);
    I=Ge/H;
    printf("计算结果为:%d人平均消费%d元\n",H,I);
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("下面将要计算非集体进餐时单次平均消费数额\n");
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    while (J!=0){
        printf("请输入非集体消费金额:");
        scanf("%d",&J);
        printf("请输入非集体消费人数:");
        scanf("%d",&K);
        L=J/K;
        printf("%d人平均消费%d元\n",K,L);
    }
    printf("运算结束,谢谢使用~~By:胜峰  QQ:872551969");
//    return(0);
}
已经写出完整程序,只是写程序时写成了整数输出,现需要精确数值到小数点后两位,求指导
11 回复
#2
zklhp2012-08-18 15:38
首先你这样应该发C语言版

要小数就用浮点数 float double 都可以 double最大能到小数点后的十几位 足够了
#3
qq8725519692012-08-18 15:41
回复 2楼 zklhp
那我应该怎样修改呢?
#4
zklhp2012-08-18 15:44
需要用到小数的部分改成float或double呗 浮点数比较 输入输出的时候的时候要注意 运算基本差不多 具体你看看书罢
#5
qq8725519692012-08-18 15:46
回复 4楼 zklhp
谢谢。
#6
houbincarson2012-08-19 00:58
需要用到小数的部分改成float或double,输出格式改为
printf("%8.2f\r\n",3.14159); 输出为: □ □ □ □ 3 . 1 4 输出宽度为8位,精确到小数点后2位
printf("%8.5f\r\n",3.14159); 输出为: □ 3 . 1 4 1 5 9     输出宽度为8位,精确到小数点后5位


#7
rjsp2012-08-20 08:10
不如将所有数值提高一百倍,从而使用整型运算
#8
qq8725519692012-08-20 19:03
回复 6楼 houbincarson
这个固然是好啊,可是最后还需要计算的
#9
会分手的空气2012-08-20 19:17
小数属于浮点型的,你用整形怎么可能有小数输出,你自己看书上关于实型的那知识点吧
#10
pangding2012-08-20 22:17
我的建议和 rjsp 一样,还是用 int 好一些。因为用浮点会涉及一些舍入的问题。
比如实际上是三分之一的元,显示出来就会变成  0.33 元。三人加起来是1元,但从输出上看却是三个 0.33,加起来就会缺 1分 钱。这种舍入如果随处可见的话,查账的时候会不平。

换句话说,内部表示用什么方法其实倒无所谓。非技术人员不会探究你是如果实现的,但如果外表看起来有严重的逻辑错误,就是 bug。
还比如一般习惯上输出金额还得用统一的格式,比如 ¥1,234.56 。所以输出也需要费心控制。

正是由于金额这种东西有这些特殊性,有些编程语言里会提供专门的类、或者库,来做这些繁琐的工作。
#11
xuexi0052012-08-21 09:44
我来看看,还是版主最积极
#12
qq8725519692012-08-24 09:19
乘以100倍,还好
1