小写金额转换为大写金额(C实现)_第1页
小写金额转换为大写金额(C实现)_第2页
小写金额转换为大写金额(C实现)_第3页
小写金额转换为大写金额(C实现)_第4页
小写金额转换为大写金额(C实现)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、请下载支持!蚕蚀蕨袅量范蒙前言银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。我的服务需要一个金额转换过程,本来想在网上找,但都是C+、JavaScript、Delphi的Demo还没有C的。索性自己写一个。参考了其它的转换算法,对我有些启发。大多的算法都是直接分析字符串生成大写金额,即存在一个假设:源字符串的格式是正确的。

2、在我的过程中,用状态机的方法分析源字符串,错误时,返回空指针(我可不敢保证传给我的过程的都是#.#)。分析出源字符串中整数部有多少个数字,是否有小数,统计结果放在一个结构体中,整数和小数部分的数字分别放在两个整形数组里。有了统计数据就可以生成大写金额了。转换过程有个难点:要区分万、亿等“段”,特别是个位这个“段”,这个概念是在小写转大写金额在C+4的实现文章中提到的。在下面的程序中用j=(size-i-1)&0x3,实际上是j=(size-i-1)%4取模,j=0时为段尾,需要特殊处理。所有的处理都是围绕0来进行的,也就是说,0才是难点。特殊位置的0,按段分,段中第一个非0数字前的0,可能有多

3、个;段中两个非0数字间的0;段尾的0;个位的0;十分位,角位置的0。另外,转换的一个重点是大写金额的写法,好像大多的算法都注重转换过程而对这个问题没有深究。我在文章后面附上转换规则。下面是代码1 .凌建妨蔓膀肄衩/*2 .蒲初期踊赚嵋噩*brief将源字符串中的小写金额转换为大写格式3 .蛔腿赚蚂薄藏蚂*4 .研辑膂蟆袈奥肄*paramdest目的字符串5 .衿蒲菱芨箴菜薄*paramsrc小写金额字符串6 .肄蔻衿蔽腿蜗腿*return7 .薇肆筮膂荽蚕辐*-NULL源字符串的格式错误,返回NULL8 .薇方董英祎蛰薄*-非NULL目的字符串的首地址9 .肇艘藏勘蚕腿荽*note转换根据:中

4、国人民银行会计司编写的最新企业、银行正确办理支付结算10 .妨莆袈螂节芍肇*指南的第114页-第115页11 .瞧芈蚁螃*/12 .蝇唐充黄聿聿袁char*chineseFee(char*dest,char*src)13 .蔽蝴n薄衿刘肃14.羁肄帔犀契滕肆enum15.肆芾裙蒂箍藏蓬16.崛蝇袄袄赣劳蒂START,/开始17.袂犀墨曹蒂蠢箍MINUS,/负号18.蔽袅量范蒙螂i芳ZEROINT,/0整数19.妨蔓膀肄袂蚕蚀INTEGER,/整数20.期踊赚嵋噩覆建DECIMAL,/小数点21.赚蚂薄藏蚂蒲裙DECIMALfRACTION,/小数位22.23.膂蟆袈奥肄蛔腿END,/结束ERR

5、OR/错误整漫股菜薄研辑24.衿蔽腿蜗腿衿蒲status=START;25.筮膂荽蚕精肄蔻struct26.董童祎蜜薄薇肆27.蕨舒密腿要微方intminus;/0为正,1为负28.袈螂节芍肇肇艘intsizeInt;29.蚁螃膈誉赚妨莆intsizeDecimal;30.充黄聿聿袁瞧芈intinteger10;31.U薄衿前肃蝇唐intdecimal10;32.帔犀契滕肆蔽螂ifeeInfo;33.木勺蒂箍藏蓬羁肄char*NumberChar=34.袄袄赣劳蒂肆芾捌,玖;零,壹,贰,叁,肆,伍,陆,柒,35.噩曹蒂蠢箍嘘蝇char*UnitChar=36.量范蒙螂i劳袂犀仟,亿,整,圆,拾

6、,佰,仟,万,拾,佰,37.膀肄袂蚕蚀蔽袅拾,佰,仟,万亿,拾,佰,仟,亿亿38.,赚嵋罪覆建妨蔓角,分,负,人民币;39.薄藏蚂蒲裙蜗踊inti,j,size;/循环变量40.袈奥肄蛔腿赚蚂intzeroTag=0,/0标志41.箴菜薄研辑膂蟆decZeroTag=0;42.腿蜗腿衿蒲菱芨char*pDest=dest;43.荽蚕精肄蔻衿蕨char*pSrc=src;44.祎蜜薄薇肆筮膂int*pInt=feeIeger;45.蚕腿荽薇方董英int*pDec=feeInfo.decimal;46.节芍肇肇艘藏勘/初始化请下载支持!47膈誉赚妨莆袈螂feeInfosizeInt=

7、0;48聿聿袁瞧芈蚁螃feeInfosizeDecimal=0;49衿刘肃蝇唐充黄feeInfominus=0;50亵滕肆蕨螭H薄/分析字符串51箍藏蓬羁肄帔犀while(1)52赣芳蒂肆芾衬蒂53蒂蠢箍嘘蝇袄袄switch(*pSrc)54蒙蝴芳袂犀噩曹55初蚕蚀蕨袅量范case-:56噩覆建鲂蔓膀肄status(statusERROR;=START)?MINUS:57feeInfo minus= ( status = MINUS) ? 1 :0;58肄蛔腿赚蚂薄藏break;59薄研辑膂蟆袈莫case1 :60腿衿蒲菱芨菽菜case2 :61精肄蔻衿蔽腿蜗case3 :62薄薇肆筮膂荽蚕c

8、ase4 :63荽薇方董童祎蜜case 5 :64肇肇艘藏勘蚕腿case 6 :65赚妨莆袈螂节芍case 7 :66袁眠芈蚁螃膈case 8 :67肃蝇唐充黄聿聿case 9 :68肆蔽螂iU薄衿前case 0 :69蓬羁肄帔犀契滕if ( *pSrc = 0 & status =77辑膂蟆袈奠肄蛔status = ZEROINT;ZEROINT)/|status=START)70蒂肆芾裙)萧箍藏71箍崛蝇袄袄赣芳status = ERROR;72艿袂犀墨曹蒂蠢break;73蚀蔽袅量黄蒙螂i74if(status=MINUS|status=START|status=INTEGER)7576

9、腿赚蚂薄藏蚂蒲if ( *pSrc = 0 & ( status =MINUS|status=START)请下载支持!78 .蒲菱芨箴菜薄研79 .蔻衿蔽腿蜗腿衿80 .肆筮膂荽蚕精肄81 .方董童祎蜜薄薇82 .艘藏勘蚕腿荽薇83 .莆袈螂节芍肇肇84 .芈蚁螃膈誉赚妨DECIMALfRACTION )85 .唐充黄聿聿袁瞧86 .蝴u薄衿前肃蝇87 .肄帔犀契滕肆蔽88 .芾木勺蒂箍藏蓬羁89 .蝇袄袄赣芳蒂肆90 .犀墨曹蒂蠢箍嘘91 . 袅量范蒙螂i劳袂92 .蔓膀肄衩蚕蚀蔽93 .踊赚嵋罪覆建妨94 .蚂薄藏蚂蒲裙期95 .蟆袈奠肄蛔腿赚96 .芨箴菜薄研辑膂97 .蔽腿蜗腿衿蒲菱Z

10、EROINT )98 .膂荽蚕精肄蔻衿99 .童祎蜜薄薇肆筮100 . 勘蚕腿荽薇方董101 .螂节芍肇肇艘藏= DECIMALfRACTIONelsestatus=INTEGER;*pInt=(*pSrc)-48;+pInt;+feeInfo.sizeInt;elseif(status=DECIMAL|status=status=DECIMALfRACTION;*pDec=(*pSrc)-48;+pDec;+feeInfo.sizeDecimal;elsestatus=ERROR;break;case.:status=(status=INTEGER|status=?DECIMAL:ERROR

11、;break;case0:status=(status=INTEGER|status| status =102.螃膈驰妨莆袈ZEROINT)?END:ERROR;103 .黄聿聿袁瞧芈蚁104 .薄衿前肃蝇曾充105 . 犀亵滕肆蕨螭n106 . 蒂箍藏蓬羁肄帔107 .袄赣芳蒂肆芾材108 .曹蒂蠢箍崛蝇袄break;default:status=ERROR;if(status=END)break;110 .肄袂蚕蚀蔽袅量111 .嵋噩覆建妨蔓膀112 .藏蚂蒲脚嘱赚113 .莫肄蛔腿赚蚂薄种情况returnNULL;+pSrc;/只有1位小数时,设置百分位为0,使下面代码不需要区分这两11

12、5.蜗腿衿蒲菱强战116.蚕精肄蔻衿蕨腿feeInfo.decimal1=0;117.蜜薄薇肆筮膂荽+feeInfo.sizeDecimal;118.腿要薇劳童黄祎119.芍肇肇艘藏勘蚕/判断是否需要打印小数部分,0120.誉赚妨莆袈螂节/需要打印小数部时,zeroTag121.聿袁眠芈蚁螃膈if(feeInfo.sizeDecimal=0122.刘肃蝇唐充黄聿|(!feeInfo.decimal0114.菜薄研辑膂蟆袈if(feeInfo.sizeDecimal=1)有小数部且十分位和百分位不都为/小数部都为0&!feeInfo.decimal1)设为0,否则设为1/没有小数123 .滕肆蔽

13、蛔n薄衿124 .藏蓬羁肄帔犀裂125 .劳蒂肆芾木勺蒂箍126 .蠢箍崛蝇袄袄赣decZeroTag=1;elsedecZeroTag=0;/printf(intsize:%ddecimalsize:%dn,feeInfo.sizeInt,feeInfo.sizeDecimal);127.蝴芳袂犀噩曹蒂strcpy(pDest,UnitChar21);/初始化目标字符串-人民币128 .蚕蚀蔽袅量黄蒙if(feeInfo.minus)strcat(负号129 .凌建妨蔓膀肄衩/处理整数部分pDest,UnitChar20);/130 .蒲初期H赚嵋噩131 .蛔腿赚蚂薄藏蚂132 .研辑膂蟆

14、袈奥肄133 .衿蒲菱芨箴菜薄0x3;size=feeInfo.sizeInt;for(i=0;isize;+i)j=size-i-1&/j=0时为段尾134 .肄蔻衿蔽腿蜗腿j)135 .薇肆筮膂荽蚕精if(feeIegeri=0&/处理非段尾0136.薇方董童祎蜜薄zeroTag=1;137.肇艘藏勘蚕腿荽138 .妨莆袈螂节芍肇&!j)139 .瞧芈蚁螃膈誉赚140 .蝇唐充黄聿聿袁decZeroTag)141 .蔽蝴H薄衿前肃elseif(feeIegeri=0/处理段尾0if(feeInfo.sizeInt=1&/特殊处理个位0strcat(pDest,N

15、umberCharfeeIegeri);142 .羁肄帔犀亵滕肆143 .肆芾木勺蒂箍藏蓬144 .蜩蝇袄袄赣劳蒂145 .袂犀噩曹蒂鬻s146 .蔽袅量范蒙螂;艿else147 .妨蔓膀肄袂蚕蚀148 .期踊赚嵋噩覆建149 .赚蚂薄藏蚂蒲裙150 .膂蟆袈莫肄蛔腿151 .菱芨箴菜薄研辑152 .衿蔽腿蜗腿衿蒲153 .筮膂荽蚕精肄蔻if(feeInfo.sizeInt!=1|decZeroTag)strcat(pDest,UnitCharsize-i)zeroTag=0;/处理非0if(zeroTag)strcat(pDest,NumberChar0);zeroTag=0;

16、strcat(pDest,NumberCharfeeIegeri);154.董童祎蜜薄薇肆155.藏勘蚕腿荽薇劳0;strcat(pDest,UnitCharsize-i);if(!j)zeroTag=/如果是段尾,设为非标志156.袈螂节芍肇肇艘157.蚁螃膈誉赚妨莆158.充黄聿聿袁瞧芈159.U薄衿前肃蝇唐160.帔犀契滕肆蔽螂i整字符161.木勺蒂箍藏蓬羁肄162.袄袄赣劳蒂肆芾163.噩曹蒂蠢箍嘘蝇164.量范蒙螂i劳袂犀if(decZeroTag)strcat(pDest,UnitChar0);/else/十分位没有小数部,打印165.膀肄裙蚕蚀蔽袅if(feeInf

17、o.decimal0)166.赚嵋噩覆建妨蔓167.薄藏蚂蒲裙期踊strcat(pDest,NumberCharfeeInfo.decimal0);168.袈奥肄蛔腿赚蚂strcat(pDest,UnitChar18);169.菽菜薄研辑膂蟆170.腿蜗腿衿蒲爱强elseif(feeInfo.sizeInt!=1|feeIeger0)171.荽蚕精肄蔻衿蔽172.祎蜜薄薇肆筮膂strcat(pDest,NumberCharfeeInfo.decimal0);173.蚕腿荽薇方董英174.节芍肇肇艘藏勘/百分位不为0时175.膈誉赚妨莆袈螂if(feeInfo.decimal1)1

18、76.聿聿袁眠芈蚁螃177.衿前肃蝇盾虬戈strcat(pDest,NumberCharfeeInfo.decimal1);178.契滕肆蔽蝴n薄strcat(pDest,UnitChar19);179.箍藏蓬羁肄帔犀180 .赣芳蒂肆芾材蒂181 .蒂蠢箍崛蝇袄袄returndest;182 .蒙蛔芳袂犀墨曹初蚕蚀蔽袅量范复制代码代码中有些地方没有注释清楚,。参考:小写转大写金额在C+用的实现附:正确填写票据和结算凭证的基本规定银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭

19、证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。一、中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、伯、仟、万(万)、亿、元、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,也应受理。二、中文大写金额数字到元为止的,在元之后,应写整(或正字,在角之后可以不写整(或正字。数字有分的,分后面不写整(或正字。三、中文大写金额数字前应标明人民币字样,大写金额数字应紧接人民币字样填写,不得留有空白。大写金额数字前未印人民币字样的,应加填人民币三字。在票据和结算凭证大写金额栏内不得预印固定的仟、佰、拾、万、仟、佰、拾、元、角、?quot;字样。四、阿拉伯小写金额数字中有0时,中文大写应按照汉语语言规

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论