标题:用c语言编写大小数字转换--程序中有不明白的点?
只看楼主
火锅店烟灰缸
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-12-15
结帖率:0
已结贴  问题点数:20 回复次数:3 
用c语言编写大小数字转换--程序中有不明白的点?
#include "stdio.h"

#include "math.h"

void main()

{

    float s,j;

    int i,q,g;

     char *a[]={"壹","贰","叁","肆","伍","陆","柒","捌","玖"};

     char *b[]={"元","十","百","千","万","十万","百万","千万","亿"};

     char *d[]={"角","分"};
     printf("请输入阿拉伯数字:");   

     scanf("%f",&s);
     s=s+0.003;

 for(i=8;i>0;i--)

{
    j=s/pow(10,i);

   if(j!=0)

   break;

}

for(q=i-1;q>=0;q--)

{
    j=s/pow(10,q);

    g=(int)j%10;

     if(g!=0)

    printf("%s%s",a[g-1],b[q]);}

for(q=-1;q>=-2;q--)
    {

   j=s/pow(10,q);

   g=(int)j%10;

  if(g!=0)

   printf("%s%s",a[g-1],d[-q-1]);}

}
s=s+0.003是为什么?
搜索更多相关主题的帖子: printf char c语言 int for 
2019-12-15 16:28
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:20 
因为你把s定义成了浮点数,那么假如把int型的2赋值给s,那么s有可能等于1.999999,也可能等于2.00001,s=s+0.003就是为了让s保持大于2的数,这样对s进行比较判断或者计算时不至于出错。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-15 16:32
火锅店烟灰缸
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2019-12-15
得分:0 
回复 2楼 纯蓝之刃
那就是说s只要加大于0的数就可以?为什么要让s大于2呢?
2019-12-15 16:45
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
比如if(s>=2)假如有这个判断语句,那么此时s=1.999999就不会进入循环。
题中j=s/pow(10,q);g=(int)j%10; 假如输入s=20,如果不加0.003,那么此时s有可能等于19.99999,假如pow(10,q)=10,那么j=1.99999,则g=1,。但是g正常应该是二。这时将s加上0.003就会避免这个问题。

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-12-15 22:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-498411-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.157315 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved