金额转换为人民币大写(C#)

 

  1 None.gif using  System;
  2 None.gif
  3 None.gif namespace  TestUpperRMB
  4 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
  5ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
  6InBlock.gif    /// 本类实现阿拉伯数字到大写中文的转换
  7InBlock.gif    /// 该类没有对非法数字进行判别,请事先自己判断数字是否合法
  8ExpandedSubBlockEnd.gif    /// </summary>

  9InBlock.gif    public class ChineseNum
 10ExpandedSubBlockStart.gifContractedSubBlock.gif    dot.gif{
 11InBlock.gif        public static string GetChineseNum(string p_num)
 12ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 13InBlock.gif            ChineseNum cn = new ChineseNum();
 14InBlock.gif        
 15InBlock.gif            return cn.NumToChn(p_num);
 16ExpandedSubBlockEnd.gif        }

 17InBlock.gif
 18InBlock.gif        public static string GetUpperMoney(double p_Money)
 19ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 20InBlock.gif            ChineseNum cn = new ChineseNum();
 21InBlock.gif
 22InBlock.gif            return cn.GetMoneyChinese(p_Money);
 23ExpandedSubBlockEnd.gif        }

 24InBlock.gif
 25InBlock.gif        //转换数字
 26InBlock.gif        private char CharToNum(char x)
 27ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 28InBlock.gif            string stringChnNames="零一二三四五六七八九";
 29InBlock.gif            string stringNumNames="0123456789";
 30InBlock.gif            return stringChnNames[stringNumNames.IndexOf(x)];
 31ExpandedSubBlockEnd.gif        }

 32InBlock.gif
 33InBlock.gif        //转换万以下整数
 34InBlock.gif        private string WanStrToInt(string x)
 35ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 36ExpandedSubBlockStart.gifContractedSubBlock.gif            string[] stringArrayLevelNames=new string[4dot.gif{"","","",""};
 37InBlock.gif            string ret="";
 38InBlock.gif            int i;
 39InBlock.gif            for (i=x.Length-1;i>=0;i--)
 40InBlock.gif                if (x[i] == '0')
 41ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 42InBlock.gif                    ret = CharToNum(x[i]) + ret;
 43ExpandedSubBlockEnd.gif                }

 44InBlock.gif                else
 45ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 46InBlock.gif                    ret = CharToNum(x[i]) + stringArrayLevelNames[x.Length - 1 - i] + ret;
 47ExpandedSubBlockEnd.gif                }

 48InBlock.gif            while ((i = ret.IndexOf("零零")) != -1)
 49ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 50InBlock.gif                ret = ret.Remove(i, 1);
 51ExpandedSubBlockEnd.gif            }

 52InBlock.gif            if (ret[ret.Length - 1== '' && ret.Length > 1)
 53ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 54InBlock.gif                ret = ret.Remove(ret.Length - 11);
 55ExpandedSubBlockEnd.gif            }

 56InBlock.gif            if (ret.Length >= 2 && ret.Substring(02== "一十")
 57ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 58InBlock.gif                ret = ret.Remove(01);
 59ExpandedSubBlockEnd.gif            }

 60InBlock.gif            return ret;
 61ExpandedSubBlockEnd.gif        }

 62InBlock.gif        //转换整数
 63InBlock.gif        private string StrToInt(string x)
 64ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
 65InBlock.gif            int len=x.Length;
 66InBlock.gif            string ret,temp;
 67InBlock.gif            if (len <= 4)
 68ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 69InBlock.gif                ret = WanStrToInt(x);
 70ExpandedSubBlockEnd.gif            }

 71InBlock.gif            else if (len <= 8)
 72ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 73InBlock.gif                ret = WanStrToInt(x.Substring(0, len - 4)) + "";
 74InBlock.gif                temp = WanStrToInt(x.Substring(len - 44));
 75InBlock.gif                if (temp.IndexOf(""== -1 && temp != "")
 76InBlock.gif                    ret += "" + temp;
 77InBlock.gif                else
 78InBlock.gif                    ret += temp;
 79ExpandedSubBlockEnd.gif            }

 80InBlock.gif            else
 81ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
 82InBlock.gif                ret = WanStrToInt(x.Substring(0, len - 8)) + "亿";
 83InBlock.gif                temp = WanStrToInt(x.Substring(len - 84));
 84InBlock.gif                if (temp.IndexOf(""== -1 && temp != "")
 85ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 86InBlock.gif                    ret += "" + temp;
 87ExpandedSubBlockEnd.gif                }

 88InBlock.gif                else
 89ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 90InBlock.gif                    ret += temp;
 91ExpandedSubBlockEnd.gif                }

 92InBlock.gif                ret += "";
 93InBlock.gif                temp = WanStrToInt(x.Substring(len - 44));
 94InBlock.gif                if (temp.IndexOf(""== -1 && temp != "")
 95ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
 96InBlock.gif                    ret += "" + temp;
 97ExpandedSubBlockEnd.gif                }

 98InBlock.gif                else
 99ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
100InBlock.gif                    ret += temp;
101ExpandedSubBlockEnd.gif                }

102InBlock.gif
103ExpandedSubBlockEnd.gif            }

104InBlock.gif            int i;
105InBlock.gif            if ((i = ret.IndexOf("零万")) != -1)
106ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
107InBlock.gif                ret = ret.Remove(i + 11);
108ExpandedSubBlockEnd.gif            }

109InBlock.gif            while ((i = ret.IndexOf("零零")) != -1)
110ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
111InBlock.gif                ret = ret.Remove(i, 1);
112ExpandedSubBlockEnd.gif            }

113InBlock.gif            if (ret[ret.Length - 1== '' && ret.Length > 1)
114ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
115InBlock.gif                ret = ret.Remove(ret.Length - 11);
116ExpandedSubBlockEnd.gif            }

117InBlock.gif            return ret;
118ExpandedSubBlockEnd.gif        }

119InBlock.gif        //转换小数
120InBlock.gif        private string StrToDouble(string x)
121ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
122InBlock.gif            string ret="";
123InBlock.gif            for (int i = 0; i < x.Length; i++)
124ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
125InBlock.gif                ret += CharToNum(x[i]);
126ExpandedSubBlockEnd.gif            }

127InBlock.gif            return ret;
128ExpandedSubBlockEnd.gif        }

129InBlock.gif
130InBlock.gif        private string NumToChn(string x)
131ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
132InBlock.gif            if (x.Length == 0)
133ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
134InBlock.gif                return "";
135ExpandedSubBlockEnd.gif            }

136InBlock.gif            string ret="";
137InBlock.gif            if (x[0]=='-')
138ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
139InBlock.gif                ret="";
140InBlock.gif                x=x.Remove(0,1);
141ExpandedSubBlockEnd.gif            }

142InBlock.gif            if (x[0].ToString() == ".")
143ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
144InBlock.gif                x = "0" + x;
145ExpandedSubBlockEnd.gif            }

146InBlock.gif            if (x[x.Length - 1].ToString() == ".")
147ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
148InBlock.gif                x = x.Remove(x.Length - 11);
149ExpandedSubBlockEnd.gif            }

150InBlock.gif            if (x.IndexOf("."> -1)
151ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
152InBlock.gif                ret += StrToInt(x.Substring(0, x.IndexOf("."))) + "" + StrToDouble(x.Substring(x.IndexOf("."+ 1));
153ExpandedSubBlockEnd.gif            }

154InBlock.gif            else
155ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
156InBlock.gif                ret += StrToInt(x);
157ExpandedSubBlockEnd.gif            }

158InBlock.gif            return ret;
159ExpandedSubBlockEnd.gif        }

160InBlock.gif
161InBlock.gif
162InBlock.gif        private string GetMoneyChinese(Double Money) 
163ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
164InBlock.gif            int i;
165InBlock.gif            string mstrSource;
166InBlock.gif                            
167InBlock.gif            if (Money == 0)
168ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
169InBlock.gif                return "";
170ExpandedSubBlockEnd.gif            }

171InBlock.gif            mstrSource = Money.ToString("#0.00");
172InBlock.gif            i = mstrSource.IndexOf(".");
173ExpandedSubBlockStart.gifContractedSubBlock.gif            if (i > 0dot.gif{mstrSource = mstrSource.Replace(".","");}
174ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrSource.Substring(0,1== "0"dot.gif{mstrSource = mstrSource.Remove(0,1);}
175InBlock.gif             
176InBlock.gif            mstrSource = NumstrToChinese(mstrSource);
177ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrSource.Length == 0dot.gif{return "";}
178InBlock.gif            //
179InBlock.gif            if (Money < 0
180ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
181InBlock.gif                mstrSource = "" + mstrSource;
182ExpandedSubBlockEnd.gif            }
       
183InBlock.gif             
184InBlock.gif            mstrSource=mstrSource.Replace("0","");
185InBlock.gif            mstrSource=mstrSource.Replace("1","");
186InBlock.gif            mstrSource=mstrSource.Replace("2","");
187InBlock.gif            mstrSource=mstrSource.Replace("3","");
188InBlock.gif            mstrSource=mstrSource.Replace("4","");
189InBlock.gif            mstrSource=mstrSource.Replace("5","");
190InBlock.gif            mstrSource=mstrSource.Replace("6","");
191InBlock.gif            mstrSource=mstrSource.Replace("7","");
192InBlock.gif            mstrSource=mstrSource.Replace("8","");
193InBlock.gif            mstrSource=mstrSource.Replace("9","");
194InBlock.gif            mstrSource=mstrSource.Replace("M","亿");
195InBlock.gif            mstrSource=mstrSource.Replace("W","");
196InBlock.gif            mstrSource=mstrSource.Replace("S","");
197InBlock.gif            mstrSource=mstrSource.Replace("H","");
198InBlock.gif            mstrSource=mstrSource.Replace("T","");
199InBlock.gif            mstrSource=mstrSource.Replace("Y","");
200InBlock.gif            mstrSource=mstrSource.Replace("J","");
201InBlock.gif            mstrSource=mstrSource.Replace("F","");
202InBlock.gif            if (mstrSource.Substring(mstrSource.Length-11!= ""
203ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
204InBlock.gif                mstrSource = mstrSource + "";
205ExpandedSubBlockEnd.gif            }

206InBlock.gif            return mstrSource;
207ExpandedSubBlockEnd.gif        }

208InBlock.gif
209InBlock.gif        //金额转换
210InBlock.gif        private string NumstrToChinese(string numstr) 
211ExpandedSubBlockStart.gifContractedSubBlock.gif        dot.gif{
212InBlock.gif            int i;
213InBlock.gif            int j;
214InBlock.gif            string mstrChar;
215InBlock.gif            string[] mstrFlag=new string[4];
216InBlock.gif            string mstrReturn="";
217InBlock.gif            bool mblnAddzero=false;
218InBlock.gif
219InBlock.gif            mstrFlag[0= "";
220InBlock.gif            mstrFlag[1= "T";
221InBlock.gif            mstrFlag[2= "H";
222InBlock.gif            mstrFlag[3= "S";
223InBlock.gif                
224InBlock.gif            for (i = 1;i<=numstr.Length;i++
225ExpandedSubBlockStart.gifContractedSubBlock.gif            dot.gif{
226InBlock.gif                j = numstr.Length  - i;
227InBlock.gif                mstrChar = numstr.Substring(i-1,1); 
228ExpandedSubBlockStart.gifContractedSubBlock.gif                if (mstrChar != "0" && j > 1dot.gif{mstrReturn = mstrReturn + mstrChar + mstrFlag[(j - 2% 4];}
229InBlock.gif                if (mstrChar == "0" && mblnAddzero==false)
230ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
231InBlock.gif                    mstrReturn = mstrReturn + "0";
232InBlock.gif                    mblnAddzero = true;
233ExpandedSubBlockEnd.gif                }

234InBlock.gif                if (j == 14)
235ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
236InBlock.gif                    if (mstrReturn.Substring(mstrReturn.Length-1== "0"
237ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn =mstrReturn.Substring(0,mstrReturn.Length-1+ "W0";}
238InBlock.gif                    else
239ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn = mstrReturn + "W";}
240ExpandedSubBlockEnd.gif                }

241InBlock.gif                if (j == 2
242ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
243InBlock.gif                    if (mstrReturn.Substring(mstrReturn.Length-1,1== "0")
244ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn =mstrReturn.Substring(0,mstrReturn.Length-1+ "Y0";}
245InBlock.gif                    else
246ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn = mstrReturn + "Y";}
247InBlock.gif                    //
248ExpandedSubBlockEnd.gif                }

249InBlock.gif                if (j == 6)
250ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
251InBlock.gif                    if (mstrReturn.Length  > 2
252ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
253InBlock.gif                        if (mstrReturn.Substring(mstrReturn.Length-2)  != "M0"
254ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif{
255InBlock.gif                            if (mstrReturn.Substring(mstrReturn.Length-1== "0")
256ExpandedSubBlockStart.gifContractedSubBlock.gif                            dot.gif{mstrReturn =mstrReturn.Substring(0,mstrReturn.Length-1+ "W0";}
257InBlock.gif                            else
258ExpandedSubBlockStart.gifContractedSubBlock.gif                            dot.gif{mstrReturn = mstrReturn + "W";}
259ExpandedSubBlockEnd.gif                        }

260ExpandedSubBlockEnd.gif                    }

261InBlock.gif                    else
262ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{
263InBlock.gif                        if (mstrReturn.Substring(mstrReturn.Length-1== "0")
264ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif{mstrReturn =mstrReturn.Substring(0,mstrReturn.Length-1+ "W0";}
265InBlock.gif                        else
266ExpandedSubBlockStart.gifContractedSubBlock.gif                        dot.gif{mstrReturn = mstrReturn + "W";}
267ExpandedSubBlockEnd.gif                    }

268ExpandedSubBlockEnd.gif                }

269InBlock.gif                if (j == 10)
270ExpandedSubBlockStart.gifContractedSubBlock.gif                dot.gif{
271InBlock.gif                    if (mstrReturn.Substring(mstrReturn.Length-1== "0"
272ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn =mstrReturn.Substring(0,mstrReturn.Length-1+ "M0";}
273InBlock.gif                    else
274ExpandedSubBlockStart.gifContractedSubBlock.gif                    dot.gif{mstrReturn = mstrReturn + "M";}
275ExpandedSubBlockEnd.gif                }

276ExpandedSubBlockStart.gifContractedSubBlock.gif                if (j == 0 && mstrChar != "0"dot.gif{mstrReturn = mstrReturn + mstrChar + "F";}
277ExpandedSubBlockStart.gifContractedSubBlock.gif                if (j == 1 && mstrChar != "0"dot.gif{mstrReturn = mstrReturn + mstrChar + "J";}
278ExpandedSubBlockStart.gifContractedSubBlock.gif                if (mstrChar != "0"dot.gif{mblnAddzero = false;}
279ExpandedSubBlockEnd.gif            }

280ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrReturn.Substring(01== "1" && mstrReturn.Substring(11== mstrFlag[1]) dot.gif{mstrReturn = mstrReturn.Substring(1);}
281ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrReturn.Substring(mstrReturn.Length-11== "0")dot.gif{mstrReturn = mstrReturn.Substring(0,mstrReturn.Length-1);}
282ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrReturn.Substring(01== "0"dot.gif{mstrReturn = mstrReturn.Substring(1);}
283ExpandedSubBlockStart.gifContractedSubBlock.gif            if (mstrReturn.Substring(mstrReturn.Length-11== "M" || mstrReturn.Substring(mstrReturn.Length-11== "W" || mstrReturn.Substring(mstrReturn.Length-11== "S" || mstrReturn.Substring(mstrReturn.Length-11== "H" || mstrReturn.Substring(mstrReturn.Length-11== "T"dot.gif{mstrReturn = mstrReturn + "Y";}
284InBlock.gif            return mstrReturn;
285ExpandedSubBlockEnd.gif        }

286InBlock.gif
287InBlock.gif
288ExpandedSubBlockEnd.gif    }

289ExpandedBlockEnd.gif}

这是我来博客园写的处女作^_^~~

转载于:https://www.cnblogs.com/match/archive/2006/08/10/473490.html

unit CnDigits;{-------------------------------------------------------------------- 货币数字转为为中文大写的组件 Version 1.31 by SNAKEJIAO 2003.4.13简介: 可以转化整数,浮点数,及时间日期型数据 配合别名列表可以进行语音合成,主要用于 东进中继卡中的PlayPrompt提示语音的合成 用于电话系统中播放金额,日期及时间 还有输入的数字序列,同时更多的应用于显示 销售系统中的打印发票时的中文大写金额字段email: jiaoguoqing26@21cn.com来自:爱数星星的猫, 时间:2003-9-17 没有习惯,有规定。给你看看人民银行的规定吧(说不定你还得改改^_^)。正确填写票据和结算凭证的基本规定 银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载账务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止涂改。 一、中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、伍(伍)、陆(陆)、柒、捌、玖、拾、佰、仟、万(万)、亿、、角、分、零、整(正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)填写,不得自造简化字。如果金额数字书写中使用繁体字,如貳、陸、億、萬、圓的,也应受理。 二、中文大写金额数字到“”为止的,在“”之后,应写“整”(或“正”)字,在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不写“整”(或“正”)字。 三、中文大写金额数字前应标明“人民币”字样,大写金额数字应紧接“人民币”字样填写,不得留有空白。大写金额数字前未印“人民币”字样的,应加填“人民币”三字。在票据和结算凭证大写金额栏内不得预印固定的“仟、佰、拾、万、仟、伯、拾、、角、分”字样。 四、阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律、金额数字构成和防止涂改的要求进行书写。举例如下: (一)阿拉伯数字中间有“O”时,中文大写金额要写“零”字。如 ¥1,409.50,应写成人民币壹仟肆佰零玖伍角。 (二)阿拉伯数字中间连续有几个“0”时,中文大写金额中间可以只写 一个“零”字。如¥6,007.14,应写成人民币陆仟零柒壹角肆分。 (三)阿拉伯金额数字万位或位是“0”,或者数字中间连续有几个“0”, 万位、位也是“0’,但千位、角位不是“0”时,中文大写金额中 可以只写一个零字,也可以不写“零”字。如¥1,680.32,应写成 人民币壹仟陆佰捌拾零叁角贰分,或者写成人民币壹仟陆佰捌拾 叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟零伍角 叁分,或者写成人民币壹拾万零柒仟伍角叁分。 (四)阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额”后面应写“零”字。如¥16,409.02,应写成人民币壹万陆 仟肆佰零玖零贰分;又如¥325.04,应写成人民币叁佰贰拾伍 零肆分。 五、阿拉伯小写金额数字前面,均应填写入民币符号“¥”(或草写:)。阿拉伯小写金额数字要认真填写,不得连写分辨不清。 六、票据的出票日期必须使用中文大写。为防止变造票据的出禀日期,在填写月、日时,月为壹、贰和壹拾的,日为壹至玖和壹拾、贰拾和叁抬的,应在其前加“零”;日为抬壹至拾玖的,应在其前加“壹”。如1月15日,应写成零壹月壹拾伍日。再如10月20日,应写成零壹拾月零贰拾日。 七、票据出票日期使用小写填写的,银行不予受理。大写日期未按要求规范填写的,银行可予受理,但由此造成损失的,由出票入自行承担。--------------------------------------------------------------------}{ ‘NOTICE: uncomment following line to discard unused code !‘}{ ‘注意: 去掉下面这一行,可以抛弃收集的其它代码‘}// { discard_other_code}interfaceuses Windows, Messages, SysUtils, Classes, Math;type //类型定义 TDate = TDateTime; TTime = TDateTime; { 中文数字大写组件 by lichaohui } TCnDigits = class(TComponent) private Fda: Boolean; procedure SetDA(const Value: Boolean); procedure SetCnUP(const Value: String); protected FCurrVa: Currency; FCnUpDigits: String; FAlias: TStrings; procedure SetCurrVa(const Value: Currency); procedure SetAlias(const Value: TStrings); public { discard_other_code} //下面是肖杨的商场管理源码中的代码 //返加人民币的中文数值 class function other_RMB(NN:real):string; //其它的两个方法 class function other_SmallTOBig(small: real): string; class function other_XD(xx: currency): string; {} //下面是lichaohui的工具函数 class function LzhFmtInt(IntValue: Int64; IsYear: Boolean = False; SoftTone: Boolean = False): String; class function LzhFmtDigits(Digits: String): String; class function LzhFmtFloat(FloatValue: Extended; RoundPos: Integer = 8): String; class function LzhFmtCurrency(AValue: Currency): String; overload; class function LzhFmtCurrency(AValue: Int64): String; overload; class function LzhFmtDate(AValue: TDate; DigitsYear: Boolean = False): String; class function StdFmtDate(AValue: TDate; DigitsYear: Boolean = False): String; class function LzhFmtTime(AValue: TTime; HasSecond: Boolean = False): String; class function LzhFmtDateTime(AValue: TDateTime; DigitsYear: Boolean = False): String; class function StdFmtDateTime(AValue: TDateTime; DigitsYear: Boolean = False): String; //常用方法调用接口 function ChineseUpper(Curr: Currency): String; function ChineseDate(ADate: TDate; DigitsYear: Boolean = False): String; function ChineseTime(ATime: TTime; HasSecond: Boolean = False): String; //等价别名转化 function StrToAlias(S: String): String; function StrToAlias2(S: String): String; //构造和析构函数 constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property CurrencyValue: Currency read FCurrVa write SetCurrVa; property CnUpperDigits: String read FCnUpDigits write SetCnUP stored False; property Alias: TStrings read FAlias write SetAlias; property DefaultAlias: Boolean read Fda write SetDA; end;const DP: WideString = ‘零壹贰叁肆伍陆柒捌玖两负‘; DN: WideString = ‘点拾佰仟万拾佰仟亿拾佰仟万拾佰仟兆拾佰仟‘; CrNa: WideString = ‘角分整‘; DtNa: WideString = ‘年月日时分秒‘;procedure Register;implementationprocedure Register;begin RegisterComponents(‘System‘, [TCnDigits]);end;{ TCnDigits }{ discard_other_code}class function TCnDigits.other_RMB(NN: real): string;var HZ, NS, NW, NA, N1, N2:string; LA, X, Nk:integer;begin //此行代码是为了修正小数位多于两位时生成的结果的错误 NN := Int(NN * 100) / 100; //下面的代码被lichaohui格式化整理 if NN > 9999999999999.99 then begin //MessageDlg(‘金额溢出。‘,mtError,[mbOk], 0); HZ := ‘‘; Result := HZ; exit; end; if NN = 0 then begin HZ := ‘零‘; result := HZ; exit; end; NS := ‘零壹贰叁肆伍陆柒捌玖‘; NW := ‘分角拾佰仟万拾佰仟亿拾佰仟万‘; NA := FloatToStr(NN * 100); LA := length(NA); X := 1; HZ := ‘‘; while X<=LA do begin NK := Ord(NA[x]) - Ord(‘0‘); N1 := Copy(NS, NK * 2 + 1, 2); N2 := Copy(NW, LA * 2 + 1 - X * 2, 2); if (NK = 0) AND ((N2 = ‘亿‘) OR( N2 = ‘万‘) OR( N2 = ‘‘))then begin if copy(HZ,Length(HZ)-1,2) = ‘零‘ then HZ := copy(HZ, 1, length(HZ) - 2); if copy(HZ, Length(HZ) - 1, 2) = ‘亿‘ then if N2 = ‘‘ then begin N1 := N2; N2 := ‘零‘; end else N2 := ‘‘ else begin N1 := N2; N2 := ‘零‘; end end else if NK=0 then begin if copy(HZ, length(HZ) - 1, 2)=‘零‘ then N1 := ‘‘; if N2=‘分‘ then begin if copy(HZ, length(HZ) - 1, 2)=‘零‘ then HZ := copy(HZ, 1, length(HZ) - 2) + ‘整‘ else HZ := HZ + ‘整‘; N1 := ‘‘; end; N2 := ‘‘; end; HZ := HZ + N1 + N2; X := X + 1 end; {end of while statement} Result := HZ;end;class function TCnDigits.other_SmallTOBig(small: real): string;var SmallMonth,BigMonth:string; wei1,qianwei1:string[2]; qianwei,dianweizhi,qian:integer;begin {------- 修改参数令值更精确 -------} {小数点后的位数,需要的话也可以改动该值} qianwei:=-2; {转换成货币形式,需要的话小数点后加多几个零} Smallmonth:=formatfloat(‘0.00‘,small); {---------------------------------} dianweizhi :=pos(‘.‘,Smallmonth);{小数点的位置} {循环小写货币的每一位,从小写的右边位置到左边} for qian:=length(Smallmonth) downto 1 do begin {如果读到的不是小数点就继续} if qiandianweizhi then begin {位置上的数转换大写} case strtoint(copy(Smallmonth,qian,1)) of 1:wei1:=‘壹‘; 2:wei1:=‘贰‘; 3:wei1:=‘叁‘; 4:wei1:=‘肆‘; 5:wei1:=‘伍‘; 6:wei1:=‘陆‘; 7:wei1:=‘柒‘; 8:wei1:=‘捌‘; 9:wei1:=‘玖‘; 0:wei1:=‘零‘; end; {判断大写位置,可以继续增大到real类型的最大值,可是谁有那么多钱} case qianwei of -3:qianwei1:=‘厘‘; -2:qianwei1:=‘分‘; -1:qianwei1:=‘角‘; 0 :qianwei1:=‘‘; 1 :qianwei1:=‘拾‘; 2 :qianwei1:=‘佰‘; 3 :qianwei1:=‘千‘; 4 :qianwei1:=‘万‘; 5 :qianwei1:=‘拾‘; 6 :qianwei1:=‘佰‘; 7 :qianwei1:=‘千‘; 8 :qianwei1:=‘亿‘; 9 :qianwei1:=‘拾‘; 10:qianwei1:=‘佰‘; 11:qianwei1:=‘千‘; end; inc(qianwei); BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额} end; end; Result := BigMonth;end;class function TCnDigits.other_XD(xx: currency): string;var dx,ws:string; i,cd:integer; int:currency;begin int:=trunc(abs(xx)+0.005*100); cd:=length(currtostr(int)); dx:=‘零壹贰叁肆伍陆柒捌玖‘; ws:=‘分角拾佰仟万拾佰仟亿拾佰仟‘; result:=‘‘; i:=1; while i 0) and (FracPart >= 10) then rs := rs + DP[1]; if (IntPart = 0) and (FracPart 0) then rs := ‘‘; if FracPart >= 10 then begin if FracPart mod 10 = 0 then rs := rs + DP[Jiao + 1] + CrNa[2] + CrNa[4] else rs := rs + DP[Jiao + 1] + CrNa[2] + DP[Fen + 1] + CrNa[3]; end else if FracPart > 0 then begin if IntPart = 0 then rs := rs + DP[Fen + 1] + CrNa[3] else rs := rs + DP[1] + DP[Fen + 1] + CrNa[3]; end else begin rs := rs + CrNa[4]; end; if AValue 0) and (FracPart >= 10) then rs := rs + DP[1]; if (IntPart = 0) and (FracPart 0) then rs := ‘‘; if FracPart >= 10 then begin if FracPart mod 10 = 0 then rs := rs + DP[Jiao + 1] + CrNa[2] + CrNa[4] else rs := rs + DP[Jiao + 1] + CrNa[2] + DP[Fen + 1] + CrNa[3]; end else if FracPart > 0 then begin if IntPart = 0 then rs := rs + DP[Fen + 1] + CrNa[3] else rs := rs + DP[1] + DP[Fen + 1] + CrNa[3]; end else begin rs := rs + CrNa[4]; end; if AValue = ‘0‘) and (Digits[i] 1e15) or (FloatValue 16 then rps := 16; beit := IntPower(10, rps); FraPart := Round(Frac(FloatValue) * beit); rs := LzhFmtInt(IntPart); if FraPart > 0 then begin Digits := IntToStr(FraPart); len := Length(Digits); while (len > 0) and (Digits[len] = ‘0‘) do len := len - 1; Digits := Copy(Digits, 1, len); rs := rs + DN[1] + LzhFmtDigits(Digits); end; if FloatValue < 0 then rs := DP[12] + rs; Result := rs;end;class function TCnDigits.LzhFmtInt(IntValue: Int64; IsYear: Boolean; SoftTone: Boolean): String;var i, n, t: Integer; bi: WideString; LastBt: WideChar; rs: WideString; reach: Boolean; LastHit: Integer;begin //限制为18位数 if IntValue 8000000000000000000 then begin Result := ‘‘; Exit; end; bi := IntToStr(IntValue); //格式化为 bi := StringOfChar(‘0‘, 20 - Length(bi)) + bi; //从左侧开始格式化 LastBt := ‘ ‘; LastHit := 0; reach := False; for i := 1 to 20 do begin //如果非0 if (bi[i] >= ‘1‘) and (bi[i] <= ‘9‘) then begin //如果前一位是0,又不到分界位,补零 if reach and (LastBt = ‘0‘) and (i mod 4 1) then begin rs := rs + DP[1]; end; reach := True; //转换数字,如果是十位,且前一位为0 if SoftTone and (i mod 4 = 3) and (LastBt = ‘0‘) and ((not reach) or (bi[i] = ‘1‘)) then else begin rs := rs + DP[(Ord(bi[i]) - Ord(‘0‘)) mod 10 + 1]; end; //添加位名 n := (20 - i) mod 20 + 1; if n > 1 then begin rs := rs + DN[n]; end; LastHit := 20 - i; end; //分界名 if (bi[i] = ‘0‘) and (i mod 4 = 0) and reach then begin //特殊分界处的显示原则,8位前为空的不显示分界名 //不是8位处的,4位前为空不显示分界名 n := (20 - i) mod 20 + 1; t := n - 1; if (n > 1) and ( ((t mod 8 = 0) and (LastHit - t < 8)) or (((t - 12) mod 8 = 0) and (LastHit - t = 0 then if Result = ‘‘ then Result := FAlias.Values[Ws[i]] else Result := Result + ‘,‘ + FAlias.Values[Ws[i]] else if Result = ‘‘ then Result := Ws[i] else Result := Result + Ws[i]; end;end;function TCnDigits.StrToAlias2(S: String): String;var Ws: WideString; i: Integer; t: Integer;begin Ws := S; for i := 1 to Length(Ws) do begin t := TStringList(FAlias).IndexOfName(Ws[i]); if t >= 0 then Result := Result + FAlias.Values[Ws[i]] else Result := Result + Ws[i]; end;end;constructor TCnDigits.Create(AOwner: TComponent);begin inherited; FAlias := TStringList.Create; TStringList(FAlias).Sorted := True; TStringList(FAlias).Duplicates := dupIgnore;end;destructor TCnDigits.Destroy;begin FAlias.Free; inherited;end;procedure TCnDigits.SetDA(const Value: Boolean);var Ws: WideString; i: Integer; sv: String;begin if Value then begin Ws := DP + DN + CrNa + DtNa; for i := 1 to Length(Ws) do begin sv := Ws[i]; FAlias.Add(sv + ‘=‘ + FAlias.Values[Ws[i]]); end; end else begin for i := FAlias.Count - 1 downto 0 do begin sv := FAlias[i]; if Trim(sv) = ‘‘ then FAlias.Delete(i) else if (Length(sv) > 0) and (sv[Length(sv)] = ‘=‘) then FAlias.Delete(i); end; end; Fda := Value;end;procedure TCnDigits.SetCnUP(const Value: String);begin //FCnUpDigits := Value;end;class function TCnDigits.StdFmtDate(AValue: TDate; DigitsYear: Boolean): String;var yy, mm, dd: Word; ys: WideString; rs: WideString;begin DecodeDate(AValue, yy, mm, dd); if DigitsYear then ys := LzhFmtDigits(IntToStr(yy)) + DtNa[1] else ys := LzhFmtInt(yy, True) + DtNa[1]; rs := ys; if (mm <= 2) or (mm = 10) then rs := rs + DP[1]; rs := rs + LzhFmtInt(mm) + DtNa[2]; if (dd < 10) or (dd mod 10 = 0) then rs := rs + DP[1]; rs := rs + LzhFmtInt(dd) + DtNa[3]; Result := rs;end;class function TCnDigits.StdFmtDateTime(AValue: TDateTime; DigitsYear: Boolean): String;var dt: TDate; tm: TTime;begin dt := AValue; tm := AValue; Result := StdFmtDate(dt, DigitsYear) + LzhFmtTime(tm);end;end.附例子Demo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值