首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>C/C++>C++>C++实现人民币阿拉伯数字转成中文大写
C++实现人民币阿拉伯数字转成中文大写
来源: 发布时间:2008-09-23 发布人: 浏览: 人次   字体: [ ]  

本文所讲要实现的功能是采用C++将人民币阿拉伯数字转成中文大写,具体功能如下:
#include <stdio.h> 
#include <math.h> 
const char mnUnit[3][2]={"分","角","元"}; 
const char OtherWords[2][2]={"整","负"}; 
const char hzUnit[8][2]={"拾","佰","仟","万","拾","佰","仟","亿"}; 
const char hzNum[10][2]={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"}; 
extern "C" __declspec(dllexport) 
       unsigned char __stdcall Money2ChineseCapital2(const double Num, 
                                                     const unsigned char BufferLength, 
                                                     char *Buffer 
                                                    ) 

   char szChMoney[33*4+1],*szNum; 
   int iLen,iLen2, iNum, iAddZero=0; 
   char buff[33]; 
   char *buf=buff; 
   sprintf( buf,"%0.0f",(double)(__int64)(Num*100.0+0.5*(Num<0.0?(-1):1))); 
   iLen=strlen(buf); 
   szNum=szChMoney; 
   if(Num<0.0) 
   { 
      *(szNum++)=OtherWords[1][0]; 
      *(szNum++)=OtherWords[1][1]; 
      buf++; 
      iLen--; 
   } 

   for(int i=1;i<=iLen;i++) 
   { 
      iNum=buf[i-1]-48; 
      iLen2=iLen-i; 
      if(iNum==0) 
      { 
         if((iLen2-2)%4==0&&(iLen2-3)>0&&((iLen2>=8)||iAddZero<3)) 
         { 
            *(szNum++)=hzUnit[(iLen2-3)%8][0]; 
            *(szNum++)=hzUnit[(iLen2-3)%8][1]; 
         } 
         iAddZero++; 
         if(iLen>1&&iLen2==1) 
         { 
            *(szNum++)=hzNum[0][0]; 
            *(szNum++)=hzNum[0][1]; 
         } 
      } 
      else 
      { 
         if((iAddZero&&iLen2>=2)&&((iLen2-1)%4!=0)||(iAddZero>=4&&(iLen2-1)>0)) 
         { 
            *(szNum++)=hzNum[0][0]; 
            *(szNum++)=hzNum[0][1]; 
         } 
         *(szNum++)=hzNum[iNum][0]; 
         *(szNum++)=hzNum[iNum][1]; 
         iAddZero=0; 
      } 
      if((iAddZero<1)||(iLen2==2)) 
      { 
         if(iLen-i>=3) 
         { 
            *(szNum++)=hzUnit[(iLen2-3)%8][0]; 
            *(szNum++)=hzUnit[(iLen2-3)%8][1]; 
         } 
         else 
         { 
            *(szNum++)=mnUnit[(iLen2)%3][0]; 
            *(szNum++)=mnUnit[(iLen2)%3][1]; 
         } 
      } 
   }
   int Result=szNum-szChMoney; 
   if(Result+(Num<0.0?(-2):0)==0) 
   { 
      *(szNum++)=hzNum[0][0]; 
      *(szNum++)=hzNum[0][1]; 
      *(szNum++)=mnUnit[2][0]; 
      *(szNum++)=mnUnit[2][1]; 
      *(szNum++)=OtherWords[0][0]; 
      *szNum=OtherWords[0][1]; 
      Result+=6; 
   } 
   else 
   if(buf[iLen+(Num<0.0?1:0)-1]=='0') 
   { 
      *(szNum++)=OtherWords[0][0]; 
      *szNum=OtherWords[0][1]; 
      Result+=2; 
   } 
   if(BufferLength) 
   { 
      if(BufferLength>0) 
         Result=(Result>BufferLength)?BufferLength:Result; 
      memcpy(Buffer,szChMoney,Result); 
   } 
   return Result; 
}


相 关 文 章   发布商链接
·c++下256色位图格式与256色位图编程
·C++实现对八进制字符串转换为整数的...
·C语言程序设计入门学习六步曲
·C++不是万能的
·实例详细介绍各种字符集编码转换问题...
·C++实现仿Office风格的颜色选取框代...
·在Linux下验证日期是否合法
·祥解C++中的this指针
·vc读取XML文件中的文本代码
·C++程序中内存划分介绍
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·如何在C++中创建持久对象的方
·c++实现获取IE缓存文件夹中的
·C++中regex库中静态正则表达...
·VC++编写交互程序时将打印结...
·实例讲解C++中CopyFileEx函数
·c++获取Windows 2000/XP操作...
·C++语言中多重继承下的虚函数
·什么是单例模式?C++中单例模...
·基于C++的DES加密算法实现代...
·vc命令行调用winrar.exe进行...
·C++计算含括号四则表达式的模
·C++程序中内存划分介绍
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·在Linux下验证日期是否合法
热 门 文 章
·基于C++的DES加密算法实现代...
·实例详细介绍各种字符集编码...
·vc读取XML文件中的文本代码
·祥解C++中的this指针
·vc命令行调用winrar.exe进行...
·C++中regex库中静态正则表达...
·C语言程序设计入门学习六步曲...
·VC++编写交互程序时将打印结...
·C++语言中多重继承下的虚函数...
·实例讲解C++中CopyFileEx函数...
·C++实现RGB和HSL颜色转换代码...
·C++不是万能的
·c++实现获取IE缓存文件夹中的...
·什么是单例模式?C++中单例模...
·谈谈对C和C++中include指令的...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .