小写金额转换为大写金额(C实现)
金额小写自动生成大写公式

金额小写自动生成大写公式金额小写转换成大写的公式主要依据中文的数字命名规则。
以下是一个可将金额小写转换成大写的公式:1.将金额小写以“元”为单位进行分组,每四位一组分组(从低位到高位),以方便命名。
2.对于每一组最高位的数字,根据其所在的组数命名单位(例如“元”、“万”、“亿”)。
其他位的数字分别根据其所在的位数加上相应的单位(例如“拾”、“佰”、“仟”、“拾万”、“佰万”、“仟万”、“拾亿”等)。
3.对于每一组中的数字,根据其大小进行命名。
命名规则如下:-0不进行命名,直接舍弃。
-1命名为“壹”或“一”(个别情况)。
-其他数字命名为“贰”、“叁”、“肆”、“伍”、“陆”、“柒”、“捌”、“玖”。
4.在每个数字后面添加相应的单位(例如“角”、“分”、“整”),其他位的单位根据需要进行命名,例如“拾角”、“佰角”、“仟分”等。
5.将每一组的命名和单位合并,组成完整的大写金额。
以下是一个具体的例子来说明公式的应用:假设要将金额小写1202.34转换成大写金额,根据公式:1.将金额小写以“元”为单位进行分组,得到两组数字:1202和342.对于最高位的数字1202,根据其所在的组数命名单位为“元”,其他位的数字分别命名为“壹仟”、“贰佰”、“零拾”、“贰”。
3.对于数字34,命名为“叁拾肆”。
4.在每个数字后面添加相应的单位:1202命名为“壹仟贰佰零拾贰元”,34命名为“叁拾肆分”。
5.将每一组的命名和单位合并,得到大写金额为“壹仟贰佰零拾贰元叁拾肆分”。
这就是将金额小写1202.34转换成大写的公式。
根据这个公式,可以将任何金额小写转换成大写。
如何将小写金额转换成大写金额函数公式

如何将小写金额转换成大写金额函数公式一、小写金额转换为大写金额的函数公式小写金额转换成大写金额需要用到数学函数,具体的公式如下:设原小写金额为A,则大写金额为B1、先将原小写金额转换为整数,即A1=整(A),其中“整()”表示向下取整。
2、将整数A1每四位一组分别进行处理,即将A1最高端的四位数字作为第一组处理,将第二组从右向左数的四位数字作为第二组处理,以此类推,直到将所有的数位进行分组处理,设分别为B1、B2、B3、B4、B5、B6,其中B1为纯整数,并按照从高到低的顺序依次存放各个分组。
3、对每个分组进行翻译,将“0”到“9”这十个基本数字转换为中文大写数字,例如“1”转换成“壹”、“2”转换成“贰”、“3”转换成“叁”等;将每个分组转换成中文大写金额,例如“一亿”、“十万”、“万”等;最后将所有分组的大写金额连接起来,即可得到最终的大写金额,也就是B。
具体的实现方法可以看下面的例子。
二、小写金额转换为大写金额实现过程例如,现将小写金额100,000.5元转换为大写金额为“壹拾万元伍角”。
1、先将小写金额100,000.5元转换为整数100,000元。
2、将整数100,000元每四位一组分别进行处理,得到B1=0,B2=1,B3=万,B4=0,B5=0,B6=0。
3、将分组B2和B3进行翻译,分别得到“壹拾”和“万”。
4、将分组B1和B4进行翻译,得到“零”。
5、将分组B5进行翻译,得到“元”。
6、将分组B6进行翻译,得到“伍角”。
7、将所有分组的大写金额连接起来,得到最终结果“壹拾万元伍角”。
三、小写金额转换为大写金额的注意事项1、当小数部分存在时,需对小数部分进行额外处理,将小数部分转换为中文大写金额的“角”和“分”。
2、当小写金额为零时,转换结果为“零元”。
3、当小写金额全为“0”时,转换结果为“零元零角零分”。
4、当小写金额为负数时,转换结果为“负壹圆”等。
综上所述,小写金额转换为大写金额需要使用数学函数以及中文大写数字,按照上述公式和步骤进行处理即可,注意特殊情况的处理,从而得到准确、生动、全面、有指导意义的转换结果。
小写数字转换大写金额

小写数字转换大写金额在生活和工作中,我们经常需要将小写数字转换为大写金额。
无论是填写支票、填报表格还是使用中文写信,正确地将小写数字转化为大写金额都是非常重要的。
在本文中,我们将探讨如何准确地将小写数字转换为大写金额,并提供一些实用的技巧和示例。
一、基本规则在将小写数字转换为大写金额时,需要遵循一些基本规则。
以下是一些基本规则的概述:1.数字组合:按照汉字的习惯用法,数字一般采用阿拉伯数字,如1、2、3等。
当数字大于9时,应使用相应的数位字符,如10、100、1000等。
例如,将数字123转换为大写金额应为“壹佰贰拾叁元整”。
2.零的使用:在金额中,零的使用是非常重要的。
每个整数数字之间都要使用“零”进行分隔,以示清晰。
例如,将数字1234转换为大写金额应为“壹仟贰佰叁拾肆元整”。
3.单位的使用:大写金额中需要标明货币单位,如“元”,“角”,“分”等。
例如,将数字123.45转换为大写金额应为“壹佰贰拾叁元肆角伍分”。
4.进位规则:当有0在整数数字中,如100、1000时,需要正确进位,并使用相应的数位字符。
例如,将数字1000转换为大写金额应为“壹仟元整”。
5.小数位的处理:小数位的处理也很关键,需要将小数部分转换为大写金额,并使用相应的数位字符。
例如,将数字123.45转换为大写金额应为“壹佰贰拾叁元肆角伍分”。
二、转换示例以下是几个常见的示例来演示如何准确地将小写数字转换为大写金额:1.数字1234.56转换为大写金额:壹仟贰佰叁拾肆元伍角陆分2.数字9999.99转换为大写金额:玖仟玖佰玖拾玖元玖角玖分3.数字10000.00转换为大写金额:壹万元整4.数字1转换为大写金额:壹元整以上示例可以帮助我们了解如何正确地将小写数字转换为大写金额。
根据不同的需要,我们可以灵活运用这些基本规则和转换示例,确保准确地将小写数字转换为大写金额。
三、注意事项在将小写数字转换为大写金额时,还需要注意一些事项,以避免出现错误。
excel小写转大写金额的三种常见方法Excel人民币金额自动大写

excel小写转大写金额的三种常见方法Excel人民币金额自动大写之前有财务岗的伙伴问过小雅这个问题,在工作中经常要填写中文大写金额,如果一个个填写大写金额,既耗时费力,又事半功倍。
并且面对大量数据,效率低下且极易出错。
今天小雅休息,给大家整理出来一起学习。
第一,单元格格式转大写金额1、将A列的数字小写金额,复制到B列,单击右键,选择设置单元格。
2、在左侧的类别栏中,单击:特殊,就会在右侧出现类型,选择---中文大写数字即可。
总结:这种excel自动大写金额方法优势在于速度快,不过如果带转换的小写数字含有小数,则会出错。
该方法只适合整数的转换。
第二, Numberstring函数转大写金额在Excel中有一个隐藏函数:numberstring函数,专门用来将小写数字金额转为大写金额的函数。
其函数语法为:Numberstring(number,参数),有三种参数,分别为1、2、3,其对应的转为大写的格式分别为中文大写金额,会计大写金额,数学大写金额。
请参考下面小雅的截图:总结:excel人民币金额大写使用到了numberstring函数,仅能将整数部分转为大写,无法将小数部分也转为大写金额,小数部分将四舍五入到整数部分。
第三,公式转大写金额我们在B2中输入公式:=SUBSTITUTE(SUBSTITUTE(TEXT(INT(A2),"[DBNum2][$-804]G/通用格式元"&IF(INT(A2)=A2,"整",""))&TEXT(MID(A2,FIND(".",A2&".0")+1,1),"[DBNum2][$-804]G/通用格式角")&TEXT(MID(A2,FIND(".",A2&".0")+2,1),"[DBNum2][$-804]G/通用格式分"),"零角","零"),"零分","")按回车键,双击之后就能自动填充,迅速将小写的数字金额转为标准的会计的大写数字金额。
人民币大小写转换(C#)

⼈民币⼤⼩写转换(C#)今天写了⼀个C#版本的⼤⼩写转换类,想着也要更新⼀下我的⽇记了,便把它传了上来。
哪位路过的⾼⼿,请指点。
这个类提供了⼀个静态⽅法叫做 Convert ( double ),传⼊⼀个9千万亿以内的数值它都能正确的转换为中⽂的⼤写。
基本的思路是将传⼊的数据分为整数部分和⼩数部分分别来处理,⼩数部分的处理⽐较简单,整数部分的处理我作了相应的注释。
1using System;23namespace Tools{4///<summary>5/// DigitalToChinese :实现将⼈民币的数字形式转换为中⽂格式。
6///</summary>7public class DigitalToChinese8 {9public DigitalToChinese(){10 }1112public static string Convert ( double digital ){13if ( digital == 0.00f )14return "零元整";1516string buf = ""; /* 存放返回结果 */17string strDecPart = ""; /* 存放⼩数部分的处理结果 */18string strIntPart = ""; /* 存放整数部分的处理结果 */1920/* 将数据分为整数和⼩数部分 */21char [] cDelim = {'.'};22string [] tmp = null;23string strDigital = digital.ToString ();24if ( strDigital[0] =='.'){ /* 处理数据⾸位为⼩数点的情况 */25 strDigital = "0" + strDigital;26 }27 tmp = strDigital.Split ( cDelim,2);2829/* 整数部分的处理 */30if ( tmp[0].Length > 15 ) {31throw new Exception ("数值超出处理范围。
数字转换为大写数字公式--摘自百度经验

将小写数字转化为财会大写数字编辑公式摘至:/article/d2b1d1024cb3f65c7f37d46b.html步骤/方法1. 第一种方法:通过函数嵌套实现数字转人民币大写形式的公式是:=IF(B1<0,"金额为负无效",(IF(OR(B1=0,B1=""),"(人民币)零元",IF(B1<1,"(人民币)",TEXT(INT(B1),"[dbnum2](人民币)G/通用格式")&"元"))))&IF((INT(B1*10)-INT(B1)*10)=0,IF(INT(B1*100)-INT(B1*10)*10=0,"","零"),(TEXT(INT(B1*10)-INT(B1)*10,"[dbnum2]")&"角"))&IF((INT(B1*100)-INT(B1*10)*10)=0,"整",TEXT((INT(B1*100)-INT(B1*10)*10),"[dbnum2]")&"分")数字转人民币大写形式的公式是:="大写金额:"&IF(TRIM(B1)="","",IF(B1=0,"","人民币"&IF(B1<0,"负",)&IF(INT(B1),TEXT(INT(ABS(B1)),"[dbnum2]")&"元",)&IF(INT(ABS(B1)*10)-INT(ABS(B1))*10,TEXT(INT(ABS(B1)*10)-INT(ABS(B1))*10,"[db num2]")&"角",IF(INT(ABS(B1))=ABS(B1),,IF(ABS(B1)<0.1,,"零")))&IF(ROUND(ABS(B1)*100-INT(ABS(B1)*10)*10,),TEXT(ROUND(ABS(B1)*100-INT(A BS(B1)*10)*10,),"[dbnum2]")&"分","整")))2. 第二种方法:通过宏VBA自定义函数实现第一步:按下ALT+F11组合键,或者是单击工具——宏——Visual Basic编辑器,进入Visual Basic编程环境,单击“插入” 菜单——模块,复制下面代码,保存,退出关闭。
金额小写转大写 Borland C++ Bulider 6.0 BCB 源代码 Source Code

if (i==0) XiaoXieStr=s+"00"; //如果是整数,没有小数点补两位角分, 缺陷如是有3位小数出错
else if (i==s.Length()) XiaoXieStr=s+"00";
else if (i==s.Length()-1) XiaoXieStr=s+"0";
MidDX.Delete(1,2); //如果第一位是元, 去掉比如0.01,0.11
if ((MidDX.SubString(1,2)=="零") )
MidDX.Delete(1,2); //如果第一位是零, 去掉 比如0.01
if ((MidDX.SubString(MidDX.Length()-3,4)=="元零") )
{MidDX=MidDX.SubString(1,MidDX.Length()-2)+"整";
return MidDX; }
if ((MidDX.SubString(MidDX.Length()-3,4)=="角零" ))
//阿拉伯金额数字元位是“0”,或数字中间连续有几个“0”,元位也是“0”,但角位不是“0”时,汉字大写金额可只写一个“零”字,也可不写“零”字,
//如¥1,320.56,汉字大写金额应写成人民币壹仟叁佰贰拾圆零伍角陆分,或人民币壹仟叁佰贰拾圆伍角陆分。
//又如¥1,000.56,汉字大写金额应写成人民币壹仟圆零伍角陆分,或人民币壹仟圆伍角陆分。
if (MidDX.SubString(oi,4)=="零零" )
表格小写金额变大写的公式

表格小写金额变大写的公式
在Excel中,可以使用一些内建函数和自定义公式将小写金额转换为大写金额。
下面是一个简单的示例公式,用于将小写金额转换为中文大写金额格式:
excel
=TEXT(INT(A1),"[DBNum2]")&TEXT(MOD(A1,1)*100,"[DBNum2]")&IF(A1<0,"负","")
这个公式假设小写金额存储在单元格A1中。
它首先将金额取整,然后使用TEXT函数和[DBNum2]格式代码将其转换为中文大写数字。
接着,它使用MOD函数获取金额的小数部分,乘以100,再次使用TEXT函数和[DBNum2]格式代码转换为中文大写数字。
最后,它检查金额是否为负数,如果是,则在结果前添加“负”字。
请注意,这个公式仅适用于整数和小数部分最多两位的金额。
如果金额的小数部分超过两位,或者金额非常大,可能需要更复杂的公式或自定义函数来实现正确的转换。
此外,这个公式也不考虑货币符号、千位分隔符等因素,如果需要处理这些情况,也需要对公式进行相应的修改。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前言银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。
票据和结算凭证是银行、单位和个人凭以记载帐务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。
因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。
我的服务需要一个金额转换过程,本来想在网上找,但都是C++、JavaScript、Delphi 的Demo,还没有C的。
索性自己写一个。
参考了其它的转换算法,对我有些启发。
大多的算法都是直接分析字符串生成大写金额,即存在一个假设:源字符串的格式是正确的。
在我的过程中,用状态机的方法分析源字符串,错误时,返回空指针(我可不敢保证传给我的过程的都是##.##)。
分析出源字符串中整数部有多少个数字,是否有小数,统计结果放在一个结构体中,整数和小数部分的数字分别放在两个整形数组里。
有了统计数据就可以生成大写金额了。
转换过程有个难点:要区分万、亿等“段”,特别是个位这个“段”,这个概念是在《小写转大写金额在C++中的实现》文章中提到的。
在下面的程序中用j= ( size - i - 1 ) & 0x3,实际上是j = ( size - i - 1 ) % 4取模,j==0时为段尾,需要特殊处理。
所有的处理都是围绕0来进行的,也就是说,0才是难点。
特殊位置的0,按段分,段中第一个非0数字前的0,可能有多个;段中两个非0数字间的0;段尾的0;个位的0;十分位,角位置的0。
另外,转换的一个重点是大写金额的写法,好像大多的算法都注重转换过程而对这个问题没有深究。
我在文章后面附上转换规则。
下面是代码1./**2.* @brief 将源字符串中的小写金额转换为大写格式3.*4.* @param dest 目的字符串5.* @param src 小写金额字符串6.* @return7.* - NULL 源字符串的格式错误,返回NULL8.* - 非NULL 目的字符串的首地址9.* @note 转换根据:中国人民银行会计司编写的最新《企业、银行正确办理支付结算10.* 指南》的第114页-第115页11.*/12.char* chineseFee( char* dest, char* src )13.{14. enum15. {16.START, //开始17.MINUS, //负号18.ZEROINT, //0整数19.INTEGER, //整数20.DECIMAL, //小数点21.DECIMALfRACTION, //小数位22.END, //结束23.ERROR //错误24. } status = START;25. struct26. {27.int minus; //0为正,1为负28.int sizeInt;29.int sizeDecimal;30.int integer[10];31.int decimal[10];32. } feeInfo;33. char* NumberChar[] =34.{ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };35. char* UnitChar[] =36.{ "整", "圆", "拾", "佰","仟", "万", "拾", "佰", "仟", "亿",37. "拾", "佰", "仟", "万亿", "拾", "佰", "仟", "亿亿",38. "角", "分", "负", "人民币" };39.40. int i, j,size; //循环变量41. int zeroTag = 0, //0标志42. decZeroTag = 0;43.44. char* pDest = dest;45. char* pSrc = src;46.47. int* pInt = feeInfo.integer;48. int* pDec = feeInfo.decimal;49.50. //初始化51. feeInfo.sizeInt = 0;52. feeInfo.sizeDecimal = 0;53. feeInfo.minus = 0;54.55. //分析字符串56. while( 1 )57. {58.switch ( *pSrc )59.{60.case '-' :61. status = ( status == START ) ? MINUS : ERROR;62. feeInfo.minus = ( status == MINUS ) ? 1 : 0;63. break;64.case '1' :65.case '2' :66.case '3' :67.case '4' :68.case '5' :69.case '6' :70.case '7' :71.case '8' :72.case '9' :73.case '0' :74. if ( *pSrc == '0' && status == ZEROINT )//|| status== START ) )75. {76.status = ERROR;77.break;78. }79. if ( status == MINUS || status == START || status== INTEGER )80. {81.if ( *pSrc == '0' && ( status == MINUS ||status == START ) )82.status = ZEROINT;83.else84.status = INTEGER;85.*pInt = (*pSrc) - 48;86.++pInt;87.++feeInfo.sizeInt;88. }89. else if ( status == DECIMAL || status ==DECIMALfRACTION )90. {91.status = DECIMALfRACTION;92.*pDec = (*pSrc) - 48;93.++pDec;94.++feeInfo.sizeDecimal;95. }96. else97. {98.status =ERROR;99. }100. break;101.case '.' :102. status = ( status == INTEGER || status == ZEROINT )103. ? DECIMAL : ERROR;104. break;105.case '\0' :106. status = ( status == INTEGER || status == DECIMALfRACTION107.|| status == ZEROINT ) ? END : ERROR;108. break;109.default :110. status = ERROR;111.}112.if ( status == END )113.break;114.else if ( status == ERROR )115.return NULL;116.117.++pSrc;118. }119.120. //只有1位小数时,设置百分位为0,使下面代码不需要区分这两种情况121. if ( feeInfo.sizeDecimal == 1 )122. {123.feeInfo.decimal[ 1 ] = 0;124.++feeInfo.sizeDecimal;125. }126. //判断是否需要打印小数部分,有小数部且十分位和百分位不都为0 127. //需要打印小数部时,zeroTag设为0,否则设为1128. if ( feeInfo.sizeDecimal ==0 //没有小数129.|| ( !feeInfo.decimal[ 0 ] && !feeInfo.decimal[ 1 ] ) ) //小数部都为0130.decZeroTag = 1;131. else132.decZeroTag = 0;133.134. //printf( "int size: %d decimal size: %d\n", feeInfo.sizeInt, feeInfo.sizeDecimal );135.136. strcpy( pDest, UnitChar[ 21 ] ); //初始化目标字符串-人民币137.138. if ( feeInfo.minus ) strcat( pDest, UnitChar[ 20 ] ); //负号139.140. //处理整数部分141. size = feeInfo.sizeInt;142. for( i = 0; i < size; ++i )143. {144.j = size - i - 1 &0x3; //j = 0时为段尾145.if ( feeInfo.integer[ i ] == 0 &&j ) //处理非段尾0146.{147.zeroTag = 1;148.}149.else if ( feeInfo.integer[ i ] == 0 && !j ) //处理段尾0150.{151.if ( feeInfo.sizeInt == 1 &&decZeroTag ) //特殊处理个位0152. strcat( pDest,NumberChar[ feeInfo.integer[ i ] ] );153.if ( feeInfo.sizeInt != 1 || decZeroTag )154. strcat( pDest, UnitChar[ size - i ] );155.zeroTag = 0;156.}157.else//处理非0158.{159.if ( zeroTag )160.{161. strcat( pDest, NumberChar[ 0 ] );162. zeroTag = 0;163.}164.strcat( pDest, NumberChar[ feeInfo.integer[ i ] ] ); 165.strcat( pDest, UnitChar[ size - i ] );166.if ( !j ) zeroTag =0; //如果是段尾,设为非标志167.}168. }169.170. if ( decZeroTag )171. {172.strcat( pDest, UnitChar[ 0 ] );//没有小数部,打印"整"字符173. }174. else175. {176.//十分位177.if ( feeInfo.decimal[ 0 ] )178.{179.strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );180.strcat( pDest, UnitChar[ 18 ] );181.}182.else if ( feeInfo.sizeInt != 1 || feeInfo.integer[ 0 ] ) 183.{184.strcat( pDest, NumberChar[ feeInfo.decimal[ 0 ] ] );185.}186.187.//百分位不为0时188.if ( feeInfo.decimal[ 1 ] )189.{190.strcat( pDest, NumberChar[ feeInfo.decimal[ 1 ] ] );191.strcat( pDest, UnitChar[ 19 ] );192.}193. }194. return dest;195.}复制代码代码中有些地方没有注释清楚,要是有不明白的可以E-Mail我z_jingwei@。