小写数字转换为中文大写的最完整C#方案
- 格式:doc
- 大小:63.50 KB
- 文档页数:9
金额小写自动生成大写公式金额小写转换成大写的公式主要依据中文的数字命名规则。
以下是一个可将金额小写转换成大写的公式:1.将金额小写以“元”为单位进行分组,每四位一组分组(从低位到高位),以方便命名。
2.对于每一组最高位的数字,根据其所在的组数命名单位(例如“元”、“万”、“亿”)。
其他位的数字分别根据其所在的位数加上相应的单位(例如“拾”、“佰”、“仟”、“拾万”、“佰万”、“仟万”、“拾亿”等)。
3.对于每一组中的数字,根据其大小进行命名。
命名规则如下:-0不进行命名,直接舍弃。
-1命名为“壹”或“一”(个别情况)。
-其他数字命名为“贰”、“叁”、“肆”、“伍”、“陆”、“柒”、“捌”、“玖”。
4.在每个数字后面添加相应的单位(例如“角”、“分”、“整”),其他位的单位根据需要进行命名,例如“拾角”、“佰角”、“仟分”等。
5.将每一组的命名和单位合并,组成完整的大写金额。
以下是一个具体的例子来说明公式的应用:假设要将金额小写1202.34转换成大写金额,根据公式:1.将金额小写以“元”为单位进行分组,得到两组数字:1202和342.对于最高位的数字1202,根据其所在的组数命名单位为“元”,其他位的数字分别命名为“壹仟”、“贰佰”、“零拾”、“贰”。
3.对于数字34,命名为“叁拾肆”。
4.在每个数字后面添加相应的单位:1202命名为“壹仟贰佰零拾贰元”,34命名为“叁拾肆分”。
5.将每一组的命名和单位合并,得到大写金额为“壹仟贰佰零拾贰元叁拾肆分”。
这就是将金额小写1202.34转换成大写的公式。
根据这个公式,可以将任何金额小写转换成大写。
大小写字母转换c语言程序大小写字母转换是C语言中常见的操作之一。
在编写程序时,我们经常需要将字符串中的字母转换为大写或小写形式,以满足不同的需求。
C语言提供了一些内置函数来实现大小写字母的转换。
其中,toupper()函数可以将小写字母转换为大写字母,而tolower()函数则可以将大写字母转换为小写字母。
在使用这些函数之前,我们需要包含头文件<ctype.h>。
接下来,我们可以使用这些函数来转换字符串中的字母。
例如,假设我们有一个字符串str,其中包含一些字母。
如果我们想将所有的字母都转换为大写形式,我们可以使用如下代码:```c#include <stdio.h>#include <ctype.h>int main() {char str[] = "Hello World";int i; for (i = 0; str[i] != '\0'; i++) {str[i] = toupper(str[i]);} printf("%s", str); return 0;}```上述代码中,我们使用了一个for循环来遍历字符串中的每个字符。
然后,我们使用toupper()函数将每个字符转换为大写形式,并将其赋值回原字符串。
我们使用printf()函数打印出转换后的字符串。
同样地,如果我们想将字符串中的字母转换为小写形式,我们可以使用tolower()函数来实现。
在实际编程中,大小写字母转换常常用于字符串比较、字符串排序等操作中。
掌握这些转换函数的使用方法,可以帮助我们更方便地处理字符串相关的任务。
大小写字母转换是C语言中常见且有用的操作。
通过使用toupper()和tolower()函数,我们可以轻松地实现字母的大小写转换,从而满足不同的编程需求。
近几年,在软件开发领域,很多项目中都需要处理阿拉伯数字小写金额转换成中文大写金额的需求。
为了满足这一需求,很多程序员开发了相应的c函数来实现这一功能。
在本文中,我将介绍一个高质量、流畅易读、结构合理的c函数,来实现阿拉伯数字小写金额转换成中文大写金额的功能。
1. 函数介绍我们知道,中文大写金额的写法和阿拉伯数字小写金额有着明显的区别。
在c语言中,我们可以通过编写相应的函数来实现这一转换。
以下是一个高质量、流畅易读的c函数示例:```c#include <stdio.h>#include <string.h>char *parseDigit(int digit, char *buffer){const char *chineseDigits[] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};const char *units[] = {"", "拾", "佰", "仟"};int qian = digit / 1000;int b本人 = (digit 1000) / 100;int shi = (digit 100) / 10;int ge = digit 10;strcpy(buffer, "");if (qian){strcat(buffer, chineseDigits[qian]); strcat(buffer, "仟");}if (b本人){strcat(buffer, chineseDigits[b本人]); strcat(buffer, "佰");}else if (qian){strcat(buffer, "零");}if (shi){if (shi != 1){strcat(buffer, chineseDigits[shi]); }strcat(buffer, "拾");}else if (b本人){strcat(buffer, "零");}else if (qian){strcat(buffer, "零");}if (ge){if (ge != 1){strcat(buffer, chineseDigits[ge]); }}else if (shi){strcat(buffer, "零");}else if (b本人 || qian){strcat(buffer, "零");}return buffer;}char *numberToChinese(int number, char *buffer) {char result[1024];strcpy(buffer, "");char temp[10];if (number == 0){strcpy(buffer, "零圆整");return buffer;}snprintf(temp, sizeof(temp), "d", number / xxx); strcat(buffer, parseDigit(number / xxx, result)); if (number / xxx){strcat(buffer, "亿");}number = xxx;if (number / xxx){strcat(buffer, parseDigit(number / xxx, result)); strcat(buffer, "万");}snprintf(temp, sizeof(temp), "d", number xxx); strcat(buffer, parseDigit(number xxx, result)); strcat(buffer, "圆");number = 100;snprintf(temp, sizeof(temp), "d", number / 10); if (number / 10){strcat(buffer, parseDigit(number / 10, result)); strcat(buffer, "角");}number = 10;snprintf(temp, sizeof(temp), "d", number);if (number){strcat(buffer, parseDigit(number, result));strcat(buffer, "分");}else{strcat(buffer, "整");}return buffer;int m本人n(){char result[1024];printf("s\n", numberToChinese(xxx, result));return 0;}```2. 函数使用示例在上面的c函数中,我们首先定义了一个parseDigit函数,用来处理每个数字的中文大写形式,然后定义了numberToChinese函数来具体实现阿拉伯数字小写金额转换成中文大写金额的功能。
EXCEL 如何把数字转化成中文大写金额格式在EXCEL表中把数字转化成中文大写金额格式是财务人员在日常工作中的一个难题,虽然在EXCEL中的单元格格式设置中有一个特殊格式中可以转换在中文大写数字,但不能给出元、角、分整的中文金额特定格式,许多财务人员为之一筹莫展,最后只能手工输入,降低了EXCEL的使用效率,但如果TRUNC工作表函数,这个问题将迎刃而解,如单元格A1=123459.72,须在某一格记录其中文大写金额,则在该格内输入函数:="大写人民币:"&IF(TRUNC(A1)=0,"",TEXT(TRUNC(A1),"[DBNum2]G/通用格式")&"元")&IF(TRUNC(A1*10)-TRUNC(A1*10,-1)=0,IF(TRUNC(A1*100)-TRUNC(A1*100,-1)<>0,"零",""),TEXT(TRUNC(A1*10)-TRUNC(A1*10,-1),"[DBNum2]G/通用格式")&"角")&IF(TRUNC(A1*100)-TRUNC(A1*100,-1)=0,"",TEXT(TRUNC(A1*100)-TRUNC(A1*100,-1), "[DBNum2]G/通用格式")&"分")&IF(TRUNC(A1*100)-TRUNC(A1*100,-1)=0,"整","")回车后将得到完整的大写中文金额格式,这个函数将广泛应用于支票大家知道,在Excel中,可以通过设置单元格格式,把单元格的阿拉伯数字直接以中文数字形式来显示,但该格式并不适用于显示票据大写金额。
小写数字转换大写金额在生活和工作中,我们经常需要将小写数字转换为大写金额。
无论是填写支票、填报表格还是使用中文写信,正确地将小写数字转化为大写金额都是非常重要的。
在本文中,我们将探讨如何准确地将小写数字转换为大写金额,并提供一些实用的技巧和示例。
一、基本规则在将小写数字转换为大写金额时,需要遵循一些基本规则。
以下是一些基本规则的概述: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转换为大写金额:壹元整以上示例可以帮助我们了解如何正确地将小写数字转换为大写金额。
根据不同的需要,我们可以灵活运用这些基本规则和转换示例,确保准确地将小写数字转换为大写金额。
三、注意事项在将小写数字转换为大写金额时,还需要注意一些事项,以避免出现错误。
c语⾔将阿拉伯数字变为⼤写,使⽤C#实现阿拉伯数字到⼤写中⽂的转换先记下来,以备后⽤!////// ⾦额转为⼤写⾦额///public class MoneyConvertChinese{////// ⾦额转为⼤写⾦额/////////public string MoneyToChinese(string LowerMoney){string functionReturnValue = null;bool IsNegative = false; // 是否是负数if (LowerMoney.Trim().Substring(0, 1) == "-"){// 是负数则先转为正数LowerMoney = LowerMoney.Trim().Remove(0, 1);IsNegative = true;}string strLower = null;string strUpart = null;string strUpper = null;int iTemp = 0;// 保留两位⼩数 123.489→123.49 123.4→123.4LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString();if (LowerMoney.IndexOf(".") > 0){if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2)LowerMoney = LowerMoney + "0";}}else{LowerMoney = LowerMoney + ".00";}strLower = LowerMoney;iTemp = 1;strUpper = "";while (iTemp <= strLower.Length){switch (strLower.Substring(strLower.Length - iTemp, 1)) {case ".":strUpart = "圆";break;case "0":strUpart = "零";break;case "1":strUpart = "壹";break;case "2":strUpart = "贰";break;case "3":strUpart = "叁";break;case "4":strUpart = "肆";break;case "5":case "6":strUpart = "陆";break;case "7":strUpart = "柒";break;case "8":strUpart = "捌";break;case "9":strUpart = "玖";break;}switch (iTemp){case 1:strUpart = strUpart + "分"; break;case 2:strUpart = strUpart + "⾓"; break;case 3:strUpart = strUpart + ""; break;case 4:strUpart = strUpart + ""; break;case 5:strUpart = strUpart + "拾"; break;case 6:strUpart = strUpart + "佰";strUpart = strUpart + "仟"; break;case 8:strUpart = strUpart + "万"; break;case 9:strUpart = strUpart + "拾"; break;case 10:strUpart = strUpart + "佰"; break;case 11:strUpart = strUpart + "仟"; break;case 12:strUpart = strUpart + "亿"; break;case 13:strUpart = strUpart + "拾"; break;case 14:strUpart = strUpart + "佰"; break;case 15:strUpart = strUpart + "仟"; break;case 16:strUpart = strUpart + "万"; break;default:strUpart = strUpart + ""; break;strUpper = strUpart + strUpper;iTemp = iTemp + 1;}strUpper = strUpper.Replace("零拾", "零");strUpper = strUpper.Replace("零佰", "零");strUpper = strUpper.Replace("零仟", "零");strUpper = strUpper.Replace("零零零", "零");strUpper = strUpper.Replace("零零", "零");strUpper = strUpper.Replace("零⾓零分", "整");strUpper = strUpper.Replace("零分", "整");strUpper = strUpper.Replace("零⾓", "零");strUpper = strUpper.Replace("零亿零万零圆", "亿圆"); strUpper = strUpper.Replace("亿零万零圆", "亿圆"); strUpper = strUpper.Replace("零亿零万", "亿");strUpper = strUpper.Replace("零万零圆", "万圆"); strUpper = strUpper.Replace("零亿", "亿");strUpper = strUpper.Replace("零万", "万");strUpper = strUpper.Replace("零圆", "圆");strUpper = strUpper.Replace("零零", "零");// 对壹圆以下的⾦额的处理if (strUpper.Substring(0, 1) == "圆"){strUpper = strUpper.Substring(1, strUpper.Length - 1); }if (strUpper.Substring(0, 1) == "零"){strUpper = strUpper.Substring(1, strUpper.Length - 1); }if (strUpper.Substring(0, 1) == "⾓"){strUpper = strUpper.Substring(1, strUpper.Length - 1); }if (strUpper.Substring(0, 1) == "分")strUpper = strUpper.Substring(1, strUpper.Length - 1);}if (strUpper.Substring(0, 1) == "整"){strUpper = "零圆整";}functionReturnValue = strUpper;if (IsNegative == true){return "负" + functionReturnValue;}else{return functionReturnValue;}}}测试代码:static void Main(string[] args){Console.Write("请输⼊要转成⼤写的数字:");string str = Console.ReadLine();Console.WriteLine("⼤写:" + new MoneyConvertChinese().MoneyToChinese(str)); Console.ReadLine();}测试结果:下⾯是其它⽹友的补充:using System;namespace ConsoleApp{////// 本类实现阿拉伯数字到⼤写中⽂的转换/// 请调⽤NumToChn⽅法///public class NumFormat{public NumFormat(){//// TODO: 在此处添加构造函数逻辑//}// 转换数字private char ToNum(char x){string strChnNames="零⼀⼆三四五六七⼋九";string strNumNames="0123456789";return strChnNames[strNumNames.IndexOf(x)];}// 转换万以下整数private string ChangeInt(string x){string[] strArrayLevelNames=new string[4] {"","⼗","百","千"}; string ret = "";int i;for (i=x.Length-1;i>=0;i--)if (x[i] == '0')ret = ToNum(x[i]) + ret;elseret = ToNum(x[i]) + strArrayLevelNames[x.Length-1-i] + ret; while ((i=ret.IndexOf("零零"))!=-1)ret=ret.Remove(i, 1);if (ret[ret.Length-1]=='零' && ret.Length>1)ret=ret.Remove(ret.Length-1,1);if (ret.Length>=2 && ret.Substring(0,2)=="⼀⼗")return ret;}// 转换整数private string ToInt(string x){int len = x.Length;string ret,temp;if (len<=4)ret = ChangeInt(x);else if (len<=8){ret = ChangeInt(x.Substring(0,len-4)) + "万"; temp = ChangeInt(x.Substring(len-4,4));if (temp.IndexOf("千")==-1 && temp!="")ret += "零" + temp;elseret += temp;}else{ret=ChangeInt(x.Substring(0,len-8)) + "亿"; temp=ChangeInt(x.Substring(len-8,4));if (temp.IndexOf("千")==-1 && temp!="")ret += "零" + temp;elseret += temp;ret += "万";temp = ChangeInt(x.Substring(len-4,4));if (temp.IndexOf("千")==-1 && temp!="")ret += "零" + temp;elseret += temp;}if ((i=ret.IndexOf("零万"))!=-1)ret = ret.Remove(i+1,1);while ((i=ret.IndexOf("零零"))!=-1)ret = ret.Remove(i,1);if (ret[ret.Length-1]=='零' && ret.Length>1)ret = ret.Remove(ret.Length-1,1);return ret;}private string ToDecimal(string x){string ret="";for (int i=0;iret += ToNum(x[i]);return ret;}public string NumToChn(string x){if (x.Length==0)return "";string ret="";if (x[0]=='-'){ret="负";x=x.Remove(0,1);}if (x[0].ToString()==".")x="0"+x;if (x[x.Length-1].ToString()==".")x=x.Remove(x.Length-1,1);if (x.IndexOf(".")>-1)ret += ToInt(x.Substring(0,x.IndexOf(".")))+"点"+ToDecimal(x.Substring(x.IndexOf(".")+1)); elseret += ToInt(x);}}}测试⼯程using System;namespace ConsoleApp{class MainClass{static void Main(string[] args){/*System.Console.WriteLine("Hello, The World!"); System.Console.WriteLine("My Love!");ClassTest ct = new ClassTest();System.Console.WriteLine(ct.Get_Str());*//*// 重载运算符MyVector v1 = new MyVector(5, 12);MyVector v2 = new MyVector(4, 3);MyVector v3 = new MyVector();v3 = v1 + v2;System.Console.WriteLine("{0}测试⼀下", v3.Length); */// 转换成⼤写数字NumFormat nf = new NumFormat();string x;while (true){Console.Write("X=");x = Console.ReadLine();if (x == "") break;} } } }。
using System;using System.Text;namespace DigitToChnText{///本程序用于将小写数字转换为中文大写, 提供以下功能://2. 能识别并处理任何错误输入//3. 算法稳定, 速度较快, 中文大写比较符合语言习惯/// 本程序用于将小写数字变成大写中文数字class DigitToChnText{private readonly char[] chnText;private readonly char[] chnDigit;public DigitToChnText(){chnText = new char[]{'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};chnDigit = new char[]{'十', '百', '千', '万', '亿'};}public string Convert( string strDigit ){// 检查输入数字decimal dec;try{dec = decimal.Parse( strDigit );}catch( FormatException ){throw new Exception("输入数字的格式不正确。
");}catch( Exception e ){throw e;}if( dec <= -10000000000000000m || dec >= 10000000000000000m ) {throw new Exception( "输入数字太大或太小,超出范围。
数字自动转大写的公式
将数字转换为大写的公式:
1. 将数字按照每四位一组,从右往左依次读出来,不足四位的,在左
边补零,例如:0012读成零零一二,123456读成一二三四五六。
2. 将每一组分别转化为汉字,按照万、亿、万亿的单位进行分组,例如:一百亿三千零五十万九千八百零六转换为“壹佰亿叁仟零伍拾万
玖仟捌百零陆”。
3. 如果数值中含有“零”的,需要注意以下规则:
1) 当零位于整个数字的大头或结尾时,只读不写。
2) 当零位于数字中间时,需要写出来。
3) 当一个数字中出现多个零时,只读一个零。
4) 当一个数字中含有多个零且跨越了万、亿等单位时,在万、亿
等单位后面加上一个“零”即可。
4. 最后将每个组合起来,并在最前面加上“负”字,如果是负数的话。
例如:-1234567890转换为“负一十二亿三千四百五十六万七千八百九十”。
大写一到十怎么写数字一到十的大写怎么写(开票用的大写)大写一到十怎么写数字一到十的大写怎么写(开票用的大写)数字大写转换_大写数字金额写法:零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、整。
一,阿拉伯数字与大、小写数字的对照表:数字小写数字大写数字0、O、零1、一、壹2、二、贰3、三、叁4、四、肆5、五、伍6、六、陆7、七、柒8、八、捌9、九、玖电脑输入方法:如果要在电脑上面打出大写数字一到十怎么打呢? 我们只需要使用拼音输入法即可打出。
当然不要用到最标准的ABC智能拼音啦。
一般用搜狗、QQ拼音都能打出大写的数字。
如下图!二、“¥”符号的来历“¥”是人民币的符号。
我国1948年12月1日开始发行妁人民币,是以“元”为单位,而“元”的汉语拼音为YuAN。
取元的拼音的第一个字母,再添加两横,组成“¥”,规定为人民币的符号。
正确票据的书写。
银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。
票据和结算凭证是银行、单位和个人凭以记载账务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。
因此,填写票据和结算凭证,必须做到标准化、规范化,要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。
三,大写数字(票据的写法)12 3 4 5 6 7 8 9 0壹贰叁肆伍陆柒捌玖零拾百仟万元角分592531.6应写为:伍拾玖万贰仟伍百叁拾壹元陆角根据规定108000的写法为:1.壹拾万零捌仟元整2.壹拾万捌仟元整上边我给的这两种写法都正确详细说明可在下方规定中查找这段话:如¥107000.53,应写成人民币壹拾万柒仟元零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。
正确填写票据和结算凭证的基本规定银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。
票据和结算凭证是银行、单位和个人凭以记载账务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。
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/通用格式分"),"零角","零"),"零分","")按回车键,双击之后就能自动填充,迅速将小写的数字金额转为标准的会计的大写数字金额。
using System;using System.Text;namespace DigitToChnText{///本程序用于将小写数字转换为中文大写, 提供以下功能://2. 能识别并处理任何错误输入//3. 算法稳定, 速度较快, 中文大写比较符合语言习惯/// 本程序用于将小写数字变成大写中文数字class DigitToChnText{private readonly char[] chnText;private readonly char[] chnDigit;public DigitToChnText(){chnText = new char[]{'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};chnDigit = new char[]{'十', '百', '千', '万', '亿'};}public string Convert( string strDigit ){// 检查输入数字decimal dec;try{dec = decimal.Parse( strDigit );}catch( FormatException ){throw new Exception("输入数字的格式不正确。
");}catch( Exception e ){throw e;}if( dec <= -10000000000000000m || dec >= 10000000000000000m ) {throw new Exception( "输入数字太大或太小,超出范围。
" );}StringBuilder strResult = new StringBuilder();// 提取符号部分// '+'在最前if( "+" == strDigit.Substring( 0, 1 ) ){strDigit = strDigit.Substring( 1 );}// '-'在最前else if( "-" == strDigit.Substring( 0, 1 ) ){strResult.Append( '负' );strDigit = strDigit.Substring( 1 );}// '+'在最后else if( "+" == strDigit.Substring( strDigit.Length - 1, 1 ) ){strDigit = strDigit.Substring( 0, strDigit.Length - 1 );}// '-'在最后else if( "-" == strDigit.Substring( strDigit.Length - 1, 1 ) ){strResult.Append( '负' );strDigit = strDigit.Substring( 0, strDigit.Length - 1 );}// 提取整数和小数部分int indexOfPoint;if( -1 == ( indexOfPoint = strDigit.IndexOf('.') ) ) // 如果没有小数部分{strResult.Append( ConvertIntegral( strDigit ) );}else // 有小数部分{// 先转换整数部分if( 0 == indexOfPoint ) // 如果“.”是第一个字符{strResult.Append( '零' );}else{strResult.Append( ConvertIntegral( strDigit.Substring( 0, indexOfPoint ) ) ); }// 再转换小数部分if( strDigit.Length - 1 != indexOfPoint ) // 如果“.”不是最后一个字符{strResult.Append( '点');strResult.Append( ConvertFractional( strDigit.Substring( indexOfPoint + 1 ) ) ); }}return strResult.ToString();}// 转换整数部分protected string ConvertIntegral(string strIntegral){// 去掉数字前面所有的'0'// 并把数字分割到字符数组中char[] integral = ( ( long.Parse( strIntegral ) ).ToString() ).ToCharArray();// 变成中文数字并添加中文数位StringBuilder strInt = new StringBuilder();int i;int digit;digit = integral.Length - 1;// 处理最高位到十位的所有数字for( i = 0; i < integral.Length - 1; i++ ){strInt.Append( chnText[ integral[i] - '0'] );if( 0 == digit % 4 ) // '万' 或'亿'{if( 4 == digit || 12 == digit ){strInt.Append( chnDigit[3] ); // '万'}else if( 8 == digit ){strInt.Append( chnDigit[4] ); // '亿'}}else // '十','百'或'千'{strInt.Append( chnDigit[digit % 4 - 1] );}digit--;}// 如果个位数不是'0'// 或者个位数为‘0’但只有一位数// 则添加相应的中文数字if( '0' != integral[ integral.Length - 1 ] || 1 == integral.Length ){strInt.Append( chnText[ integral[ i ] - '0' ] );}// 遍历整个字符串i = 0;while( i < strInt.Length){int j = i;bool bDoSomething = false;// 查找所有相连的“零X”结构while( j < strInt.Length - 1 && "零" == strInt.ToString().Substring( j, 1 ) ) {string strTemp = strInt.ToString().Substring( j + 1, 1 );// 如果是“零万”或者“零亿”则停止查找if( "万" == strTemp || "亿" == strTemp ){bDoSomething = true;break;}j += 2;}if( j != i) // 如果找到“零X”结构,则全部删除{strInt = strInt.Remove( i, j - i);// 除了在最尾处,或后面不是"零万"或"零亿"的情况下,// 其他处均补入一个“零”if( i <= strInt.Length - 1 && !bDoSomething ){strInt = strInt.Insert( i, '零' );i++;}if( bDoSomething ) // 如果找到"零万"或"零亿"结构{strInt = strInt.Remove( i, 1 ); // 去掉'零'i++;continue;}// 指针每次可移动2位i += 2;}// 遇到“亿万”变成“亿零”或"亿"int index = strInt.ToString().IndexOf( "亿万" );if( -1 != index ){if( strInt.Length - 2 != index && // 如果"亿万"不在最后( index + 2 < strInt.Length && "零" != strInt.ToString().Substring( index + 2, 1) ) ) // 并且其后没有"零"strInt = strInt.Replace( "亿万", "亿零", index, 2 );elsestrInt = strInt.Replace( "亿万", "亿", index, 2);}// 开头为“一十”改为“十”if( strInt.Length > 1 && "一十" == strInt.ToString().Substring( 0, 2 ) ){strInt = strInt.Remove( 0, 1 );}return strInt.ToString();}// 转换小数部分protected string ConvertFractional( string strFractional ){char[] fractional = strFractional.ToCharArray();StringBuilder strFrac = new StringBuilder();// 变成中文数字int i;for( i = 0; i < fractional.Length; i++ )strFrac.Append( chnText[ fractional[ i ] - '0' ] );}return strFrac.ToString();}////// The main entry point for the application.///[STAThread]static void Main(string[] args){DigitToChnText obj = new DigitToChnText();string str = " ";while( "" != str ){Console.Write( "请输入小写数字: " );if( "" == ( str = Console.ReadLine() ) )break;try{Console.WriteLine( "大写中文数字为: {0}\n", obj.Convert( str ) );}catch( Exception e ){Console.WriteLine( "错误: {0}\n", e.Message );continue;}}}}}本文来自CSDN博客,转载请标明出处:/waterboy/archive/2004/08/13/74060.asp方法二:例如:(new Money(200)).ToString() == "贰佰元"namespace Skyiv.Util{using System.Text;class Test{static void Main(){for (;;){System.Console.Write( "金额: ");string s = System.Console.ReadLine();decimal m;try { m = decimal.Parse(s); }catch { break; }System.Console.WriteLine( "大写: " + new Money(m));}}}// 该类重载的ToString() 方法返回的是大写金额字符串class Money{public string Yuan = "元"; // “元”,可以改为“圆”、“卢布”之类public string Jiao = "角"; // “角”,可以改为“拾”public string Fen = "分"; // “分”,可以改为“美分”之类static string Digit = "零壹贰叁肆伍陆柒捌玖"; // 大写数字bool isAllZero = true; // 片段内是否全零bool isPreZero = true; // 低一位数字是否是零bool Overflow = false; // 溢出标志long money100; // 金额*100,即以“分”为单位的金额long value; // money100的绝对值StringBuilder sb = new StringBuilder(); // 大写金额字符串,逆序// 只读属性: "零元"public string ZeroString{get { return Digit[0] + Yuan; }}// 构造函数public Money(decimal money){try { money100 = (long)(money * 100m); }catch { Overflow = true; }if (money100 == long.MinV alue) Overflow = true;}// 重载ToString() 方法,返回大写金额字符串public override string ToString(){if (Overflow) return "金额超出范围";if (money100 == 0) return ZeroString;string [] Unit = { Yuan, "万", "亿", "万", "亿亿" };value = System.Math.Abs(money100);ParseSection(true);for (int i = 0; i < Unit.Length && value > 0; i++){if (isPreZero && !isAllZero) sb.Append(Digit[0]);if (i == 4 && sb.ToString().EndsWith(Unit[2]))sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);sb.Append(Unit[i]);ParseSection(false);if ((i % 2) == 1 && isAllZero)sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);}if (money100 < 0) sb.Append( "负");return Reverse();}// 解析“片段”: “角分(2位)”或“万以内的一段(4位)”void ParseSection(bool isJiaoFen){string [] Unit = isJiaoFen ?new string [] { Fen, Jiao } :new string [] { " ", "拾", "佰", "仟" };isAllZero = true;for (int i = 0; i < Unit.Length && value > 0;i++){int d = (int)(value % 10);if (d != 0){if (isPreZero && !isAllZero) sb.Append(Digit[0]);sb.AppendFormat( "{0}{1} ", Unit[i], Digit[d]);isAllZero = false;}isPreZero = (d == 0);value /= 10;}}// 反转字符串string Reverse(){StringBuilder sbReversed = new StringBuilder();for (int i = sb.Length - 1; i > = 0; i--)sbReversed.Append(sb[i]);return sbReversed.ToString();}}}。