注册 登录
编程论坛 C语言论坛

用c语言编写大小数字转换--程序中有不明白的点?

火锅店烟灰缸 发布于 2019-12-15 16:28, 1460 次点击
#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是为什么?
3 回复
#2
纯蓝之刃2019-12-15 16:32
因为你把s定义成了浮点数,那么假如把int型的2赋值给s,那么s有可能等于1.999999,也可能等于2.00001,s=s+0.003就是为了让s保持大于2的数,这样对s进行比较判断或者计算时不至于出错。
#3
火锅店烟灰缸2019-12-15 16:45
回复 2楼 纯蓝之刃
那就是说s只要加大于0的数就可以?为什么要让s大于2呢?
#4
纯蓝之刃2019-12-15 22:32
比如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就会避免这个问题。
1