免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5034 | 回复: 4

[函数] 金额数字转换大写函数 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2003-05-09 16:16 |显示全部楼层

  1. #include <stdio.h>;

  2. #define TEN     "拾"
  3. #define HND     "佰"
  4. #define THU     "仟"
  5. #define TTH     "万"
  6. #define HMI     "亿"

  7. #define FILL(A)         if(!zflag) \
  8.                                 strcat(sResult, A); \
  9.                         break
  10. #define FILLW(A)        if(!zflag) \
  11.                         { \
  12.                                 tthflag = 1; \
  13.                                 strcat(sResult, A); \
  14.                         } \
  15.                         break

  16. #define FILLY(A)        if(!zflag) \
  17.                         { \
  18.                                 hmiflag = 1; \
  19.                                 strcat(sResult, A); \
  20.                         } \
  21.                         break

  22. void main(int argc, char **argv)
  23. {
  24.         if(argc < 2)
  25.         {
  26.                 printf("Usage: %s amt\n", argv[0]);
  27.                 exit(0);
  28.         }
  29.         PrintBigMoney(argv[1]);

  30.         exit(0);
  31. }

  32. int PrintBigMoney(char *source)
  33. {
  34.         char    sResult[300], intpart[30], decpart[20], *pstr;
  35.         char    *BigNum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  36.         int     i, intlen, p_int = 0, zheadflag = 1, zflag = 0;
  37.         int     tthflag = 0, hmiflag = 0;                                                                                                                     

  38.         memset(sResult, '\0', sizeof(sResult));
  39.         strcpy(intpart, source);

  40.         if (intpart[p_int] == '-')
  41.         {
  42.                 strcat(sResult, "负");
  43.                 p_int++;
  44.         }

  45.         pstr = (char *)strstr(intpart + p_int, ".");
  46.         if (pstr != NULL)
  47.         {
  48.                 pstr[0] = '\0';
  49.                 strcpy(decpart, pstr + 1);
  50.         }
  51.         intlen = strlen(intpart);
  52.         for(i = 0; i < intlen; i++)
  53.         {
  54.                 if(intpart[i] < '0' || intpart[i] >; '9')
  55.                                                                               
  56.                 {
  57.                         printf("part of int is not valid\n");
  58.                         exit(0);
  59.                 }
  60.         }
  61.         for(i = 0; i < strlen(decpart); i++)
  62.         {
  63.                 if(decpart[i] < '0' || decpart[i] >; '9')
  64.                 {
  65.                         printf("part of dec is not valid\n");
  66.                         exit(0);
  67.                 }
  68.         }
  69.         if(intlen >; 12)
  70.                 printf("Warning: number is too large to translate, result is pos
  71. sibly not accuracy!\n");
  72.         if(atol(intpart) == 0)
  73.                 strcat(sResult, BigNum[0]);
  74.         for (i = p_int; i < intlen; i++)
  75.         {
  76.                 if (intpart[i] == '0')                                         
  77.                 {
  78.                         if(zheadflag)
  79.                                 continue;
  80.                         else
  81.                                 zflag = 1;
  82.                 }
  83.                 else
  84.                 {
  85.                         zheadflag = 0;
  86.                         if(zflag)
  87.                         {
  88.                                 strcat(sResult, BigNum[0]);
  89.                                 zflag = 0;
  90.                         }
  91.                         strcat(sResult, BigNum[intpart[i] - '0']);
  92.                 }
  93.                 switch(intlen - i)
  94.                 {
  95.                 case 2:
  96.                         FILL(TEN);
  97.                 case 6:
  98.                                                                               
  99.                         FILLW(TEN);
  100.                 case 10:
  101.                         FILLY(TEN);
  102.                 case 14:
  103.                         FILLW(TEN);
  104.                 case 18:
  105.                         FILLY(TEN);
  106.                 case 3:
  107.                         FILL(HND);
  108.                 case 7:
  109.                         FILLW(HND);
  110.                 case 11:
  111.                         FILLY(HND);
  112.                 case 15:
  113.                         FILLW(HND);
  114.                 case 19:
  115.                         FILLY(HND);
  116.                 case 4:
  117.                         FILL(THU);
  118.                 case 8:
  119.                         FILLW(THU);
  120.                 case 12:
  121.                         FILLY(THU);
  122.                 case 16:
  123.                         FILLW(THU);
  124.                 case 20:
  125.                         FILLY(THU);
  126.                 case 5:
  127.                 case 13:
  128.                         if(!zflag)
  129.                                 strcat(sResult, TTH);
  130.                         else
  131.                         {
  132.                                 if(tthflag)
  133.                                         strcat(sResult, TTH);
  134.                         }
  135.                         break;
  136.                 case 9:
  137.                         tthflag = 0;
  138.                 case 17:
  139.                                 strcat(sResult, HMI);
  140.                         break;                                                
  141.                 }
  142.         }
  143.         strcat(sResult, "元");
  144.         if ((strlen(decpart) != 0) && (atol(decpart) != 0))
  145.         {
  146.                 for (i = 0; i < strlen(decpart); i++)
  147.                 {
  148.                         if (decpart[i] >;= '0' && decpart[i] <= '9')
  149.                                 strcat(sResult, BigNum[decpart[i] - '0']);
  150.                         if (i == 0)
  151.                                 strcat(sResult, "角");
  152.                         if (i == 1)
  153.                                 strcat(sResult, "分");
  154.                 }
  155.         }
  156.         else
  157.                 strcat(sResult, "整");
  158.         printf("%s\n", sResult);
  159. }
复制代码

论坛徽章:
0
发表于 2003-05-09 18:00 |显示全部楼层

金额数字转换大写函数

这样的程序在计费中使用得比较多的了
如果各位以后想到通信行业的可以看看

论坛徽章:
0
发表于 2003-05-13 15:10 |显示全部楼层

金额数字转换大写函数

程序编译不过去!

下边的这段是什么意思?

#define FILL(A)         if(!zflag) \
                                strcat(sResult, A); \
                        break
#define FILLW(A)        if(!zflag) \
                        { \
                                tthflag = 1; \
                                strcat(sResult, A); \
                        } \
                        break

#define FILLY(A)        if(!zflag) \
                        { \
                                hmiflag = 1; \
                                strcat(sResult, A); \
                        } \
                        break

论坛徽章:
0
发表于 2003-05-13 15:29 |显示全部楼层

金额数字转换大写函数

把\后面的空格、tab等字符删掉就可以了。
\表示转义,这里是把回车换行转义掉。

论坛徽章:
0
发表于 2014-09-20 21:02 |显示全部楼层
楼主求解,为什么我编译无法通过?你用的什么编译器?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP