把2456.7元转成贰千四百五十六元七角 这个算法怎么做?

来源:互联网 发布:mac搜狗输入法无法打开 编辑:程序博客网 时间:2024/04/27 21:52

'转换数字金额主函数(包括小数)  
          '数字字符串  
          '转换成中文大写后的字符串或者出错信息提示字符串  
          Public   Function   ConvertSum(ByVal   str   As   String)   As   String  
                  If   Not   IsPositveDecimal(str)   Then   Return   "输入的不是正数字!"  
                  If   (Double.Parse(str)   >   999999999999.99)   Then   Return   "数字太大,无法换算,请输入一万亿元以下的金额"  
                  Dim   ch()   As   Char   =   New   Char(1)   {}  
                  ch(0)   =   "."c   '小数点  
                  Dim   splitstr()   As   String   =   Nothing     '定义按小数点分割后的字符串数组  
                  splitstr   =   str.Split(ch(0))   '按小数点分割字符串  
                  If   (splitstr.Length   =   1)   Then   '只有整数部分  
                          Return   ConvertData(str)   +   "圆整"  
                  Else   '有小数部分  
                          Dim   rstr   As   String  
                          rstr   =   ConvertData(splitstr(0))   +   "圆"   '转换整数部分  
                          rstr   +=   ConvertXiaoShu(splitstr(1))   '转换小数部分  
                          Return   rstr  
                  End   If  
          End   Function  
   
          '   判断是否是正数字字符串  
          '判断字符串  
          '   如果是数字,返回true,否则返回false  
          Public   Function   IsPositveDecimal(ByVal   str   As   String)   As   Boolean  
                  Dim   d   As   Decimal  
                  Try  
                          d   =   Decimal.Parse(Str)  
                  Catch  
                          Return   False  
                  End   Try  
                  If   (d   >   0)   Then  
                          Return   True  
                  Else  
                          Return   False  
                  End   If  
          End   Function  
          '转换数字(整数)  
          '   需要转换的整数数字字符串  
          '   转换成中文大写后的字符串  
          Public   Function   ConvertData(ByVal   str   As   String)   As   String  
                  Dim   tmpstr   As   String   =   ""  
                  Dim   rstr   As   String   =   ""  
                  Dim   strlen   As   Integer   =   str.Length  
                  If   strlen   <=   4   Then   '数字长度小于四位  
                          rstr   =   ConvertDigit(str)  
                  Else  
                          If   strlen   <=   8   Then   '数字长度大于四位,小于八位  
                                  tmpstr   =   str.Substring(strlen   -   4,   4)   '先截取最后四位数字  
                                  rstr   =   ConvertDigit(tmpstr)   '转换最后四位数字  
                                  tmpstr   =   str.Substring(0,   strlen   -   4)   '截取其余数字  
                                  '将两次转换的数字加上萬后相连接  
                                  rstr   =   String.Concat(ConvertDigit(tmpstr)   +   "萬",   rstr)  
                                  rstr   =   rstr.Replace("零萬",   "萬")  
                                  rstr   =   rstr.Replace("零零",   "零")  
                          Else  
                                  If   (strlen   <=   12)   Then   '数字长度大于八位,小于十二位  
   
                                          tmpstr   =   str.Substring(strlen   -   4,   4)   '先截取最后四位数字  
                                          rstr   =   ConvertDigit(tmpstr)   '转换最后四位数字  
                                          tmpstr   =   str.Substring(strlen   -   8,   4)   '再截取四位数字  
                                          rstr   =   String.Concat(ConvertDigit(tmpstr)   +   "萬",   rstr)  
                                          tmpstr   =   str.Substring(0,   strlen   -   8)  
                                          rstr   =   String.Concat(ConvertDigit(tmpstr)   +   "億",   rstr)  
                                          rstr   =   rstr.Replace("零億",   "億")  
                                          rstr   =   rstr.Replace("零萬",   "零")  
                                          rstr   =   rstr.Replace("零零",   "零")  
                                          rstr   =   rstr.Replace("零零",   "零")  
                                  End   If  
                          End   If  
                  End   If  
                  strlen   =   rstr.Length  
                  If   strlen   >=   2   Then  
                          Select   Case   rstr.Substring(strlen   -   2,   2)  
                                  Case   "佰零"  
                                          rstr   =   rstr.Substring(0,   strlen   -   2)   +   "佰"  
                                  Case   "仟零"  
                                          rstr   =   rstr.Substring(0,   strlen   -   2)   +   "仟"  
                                  Case   ("萬零")  
                                          rstr   =   rstr.Substring(0,   strlen   -   2)   +   "萬"  
                                  Case   "億零"  
                                          rstr   =   rstr.Substring(0,   strlen   -   2)   +   "億"  
                          End   Select  
                  End   If  
                  Return   rstr  
          End   Function  
          '转换数字(小数部分)  
          '需要转换的小数部分数字字符串  
          '转换成中文大写后的字符串  
          Public   Function   ConvertXiaoShu(ByVal   str   As   String)   As   String  
                  Dim   strlen   As   Integer   =   str.Length  
                  Dim   rstr   As   String  
                  If   strlen   =   1   Then  
                          rstr   =   ConvertChinese(str)   +   "角"  
                          Return   rstr  
                  Else  
                          Dim   tmpstr   As   String   =   str.Substring(0,   1)  
                          rstr   =   ConvertChinese(tmpstr)   +   "角"  
                          tmpstr   =   str.Substring(1,   1)  
                          rstr   +=   ConvertChinese(tmpstr)   +   "分"  
                          rstr   =   rstr.Replace("零分",   "")  
                          rstr   =   rstr.Replace("零角",   "")  
                          Return   rstr  
                  End   If  
          End   Function  
          '转换数字  
          '转换的字符串(四位以内)  
          Public   Function   ConvertDigit(ByVal   str   As   String)   As   String  
                  Dim   strlen   As   Integer   =   str.Length  
                  Dim   rstr   As   String   =   ""  
                  Select   Case   strlen  
                          Case   1  
                                  rstr   =   ConvertChinese(str)  
                          Case   2  
                                  rstr   =   Convert2Digit(str)  
                          Case   3  
                                  rstr   =   Convert3Digit(str)  
                          Case   4  
                                  rstr   =   Convert4Digit(str)  
                  End   Select  
                  rstr   =   rstr.Replace("拾零",   "拾")  
                  strlen   =   rstr.Length  
                  Return   rstr  
          End   Function  
          '转换四位数字    
          Public   Function   Convert4Digit(ByVal   str   As   String)   As   String  
                  Dim   str1   As   String   =   str.Substring(0,   1)  
                  Dim   str2   As   String   =   str.Substring(1,   1)  
                  Dim   str3   As   String   =   str.Substring(2,   1)  
                  Dim   str4   As   String   =   str.Substring(3,   1)  
                  Dim   rstring   As   String   =   ""  
                  rstring   +=   ConvertChinese(str1)   +   "仟"  
                  rstring   +=   ConvertChinese(str2)   +   "佰"  
                  rstring   +=   ConvertChinese(str3)   +   "拾"  
                  rstring   +=   ConvertChinese(str4)  
                  rstring   =   rstring.Replace("零仟",   "零")  
                  rstring   =   rstring.Replace("零佰",   "零")  
                  rstring   =   rstring.Replace("零拾",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  Return   rstring  
          End   Function  
          '   转换三位数字  
          Public   Function   Convert3Digit(ByVal   str   As   String)   As   String  
                  Dim   str1   As   String   =   str.Substring(0,   1)  
                  Dim   str2   As   String   =   str.Substring(1,   1)  
                  Dim   str3   As   String   =   str.Substring(2,   1)  
                  Dim   rstring   As   String   =   ""  
                  rstring   +=   ConvertChinese(str1)   +   "佰"  
                  rstring   +=   ConvertChinese(str2)   +   "拾"  
                  rstring   +=   ConvertChinese(str3)  
                  rstring   =   rstring.Replace("零佰",   "零")  
                  rstring   =   rstring.Replace("零拾",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  Return   rstring  
          End   Function  
          '转换二位数字  
          Public   Function   Convert2Digit(ByVal   str   As   String)   As   String  
                  Dim   str1   As   String   =   str.Substring(0,   1)  
                  Dim   str2   As   String   =   str.Substring(1,   1)  
                  Dim   rstring   As   String   =   ""  
                  rstring   +=   ConvertChinese(str1)   +   "拾"  
                  rstring   +=   ConvertChinese(str2)  
                  rstring   =   rstring.Replace("零拾",   "零")  
                  rstring   =   rstring.Replace("零零",   "零")  
                  Return   rstring  
          End   Function  
          '将一位数字转换成中文大写数字  
          Public   Function   ConvertChinese(ByVal   str   As   String)   As   String  
                  '"零壹贰叁肆伍陆柒捌玖拾佰仟萬億圆整角分"  
                  Dim   ccstr   As   String   =   ""  
                  Select   Case   str  
                          Case   "0"  
                                  ccstr   =   "零"  
                          Case   "1"  
                                  ccstr   =   "壹"  
                          Case   "2"  
                                  ccstr   =   "贰"  
                          Case   "3"  
                                  ccstr   =   "叁"  
                          Case   "4"  
                                  ccstr   =   "肆"  
                          Case   "5"  
                                  ccstr   =   "伍"  
                          Case   "6"  
                                  ccstr   =   "陆"  
                          Case   "7"  
                                  ccstr   =   "柒"  
                          Case   "8"  
                                  ccstr   =   "捌"  
                          Case   "9"  
                                  ccstr   =   "玖"  
                  End   Select  
                  Return   (ccstr)  
          End   Function  
  End   Class  

 

在.net里调用EXCEL里的  
   
  =CONCATENATE(TEXT(INT(E29),"[DBNum2][$-804]G/通用格式"),"圆",TEXT(INT((E29-INT(E29))*10),"[DBNum2][$-804]G/通用格式"),"角",TEXT(INT((E29*10-INT(E29*10))*10+0.5),"[DBNum2][$-804]G/通用格式"),"分")  
   
  这里的E29是任意设定的单元格  
  输出的结果就是要的