货币金额大写转换库

http://www.vckbase.com/bbs/prime/viewprime.asp?id=576

// 货币金额大写转换库   Money2String.dll

// 静态中文转换方法     String GetCnString(String MoneyString)
// 最大转化金额         9999999999999999.99  (16位整数位,2位小数位)
// 方法返回值           转换成功则返回非零长字串,否则返回零长字串

// 静态英文转换方法     String GetEnString(String MoneyString)
// 最大转化金额         999999999999999.99   (15位整数位,2位小数位)
// 方法返回值           转换成功则返回非零长字串,否则返回零长字串

// 程序设计 xlFancy     版本 2003.03.18.22 - 2003.04.09
// 邮箱地址 xlfancy@21cn.com

using System;

namespace Money2String
{
    public class Money2String
    {

private static readonly String   cnNumber      = "零壹贰叁肆伍陆柒捌玖";
        private static readonly String   cnUnit        = "分角元拾佰仟万拾佰仟亿拾佰仟兆拾佰仟";

private static readonly String[] enSmallNumber = {"","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN","ELEVEN","TWELVE","THIRTEEN","FOURTEEN","FIFTEEN","SIXTEEN","SEVENTEEN","EIGHTEEN","NINETEEN"};
        private static readonly String[] enLargeNumber = {"TWENTY","THIRTY","FORTY","FIFTY","SIXTY","SEVENTY","EIGHTY","NINETY"};
        private static readonly String[] enUnit        = {"","THOUSAND","MILLION","BILLION","TRILLION"};

// 以下是货币金额中文大写转换方法
        public static String GetCnString(String MoneyString)
        {
            String [] tmpString  = MoneyString.Split('.');
            String    intString  = MoneyString;   // 默认为整数
            String    decString  = "";            // 保存小数部分字串
            String    rmbCapital = "";            // 保存中文大写字串
            int       k;
            int       j;
            int       n;

if (tmpString.Length>1)
            {
                intString = tmpString[0];             // 取整数部分
                decString = tmpString[1];             // 取小数部分
            }
            decString += "00";
            decString  = decString.Substring (0,2);   // 保留两位小数位
            intString += decString;

try
            {
                k = intString.Length -1;
                if (k>0 && k<18)
                {
                    for (int i=0;i<=k;i++)
                    {
                        j=(int)intString-48;
                        // rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];     // 供调试用的直接转换
                        n = i+1 >= k ? (int)intString[k]-48int)intString[i+1]-48; // 等效于 if( ){ }else{ }
                        if (j==0)
                        {
                            if(k-i==2 || k-i==6 || k-i==10 || k-i==14)
                            {
                                rmbCapital += cnUnit[k-i];
                            }
                            else
                            {
                                if (n != 0)
                                {
                                    rmbCapital  += cnNumber[j];
                                }
                            }
                        }
                        else
                        {
                            rmbCapital = rmbCapital + cnNumber[j] + cnUnit[k-i];
                        }
                    }

rmbCapital = rmbCapital.Replace ("兆亿万","兆");
                    rmbCapital = rmbCapital.Replace ("兆亿","兆");
                    rmbCapital = rmbCapital.Replace ("亿万","亿");
                    rmbCapital = rmbCapital.TrimStart('元');
                    rmbCapital = rmbCapital.TrimStart('零');

return rmbCapital;
                }
                else
                {
                    return "";   // 超出转换范围时,返回零长字串
                }
            }
            catch
            {
                return "";   // 含有非数值字符时,返回零长字串
            }
        }

// 以下是货币金额英文大写转换方法
        public static String GetEnString(String MoneyString)
        {
            String [] tmpString  = MoneyString.Split('.');
            String    intString  = MoneyString;   // 默认为整数
            String    decString  = "";            // 保存小数部分字串
            String    engCapital = "";            // 保存英文大写字串
            String    strBuff1;
            String    strBuff2;
            String    strBuff3;
            int       curPoint;
            int       i1;
            int       i2;
            int       i3;
            int       k;
            int       n;
    
            if (tmpString.Length >1)
            {
                intString = tmpString[0];             // 取整数部分
                decString = tmpString[1];             // 取小数部分
            }
            decString += "00";
            decString  = decString.Substring (0,2);   // 保留两位小数位
    
            try
            {
                // 以下处理整数部分
                curPoint = intString.Length-1;
                if (curPoint>=0 && curPoint<15)
                {
                    k = 0;
                    while(curPoint>=0)
                    {
                        strBuff1 = "";
                        strBuff2 = "";
                        strBuff3 = "";
                        if (curPoint>=2)
                        {
                            n=int.Parse(intString.Substring(curPoint-2,3));
                            if (n !=0)
                            {
                                i1 = n/100;            // 取佰位数值
                                i2 = (n-i1*100)/10;    // 取拾位数值
                                i3 = n-i1*100-i2*10;   // 取个位数值
                                if (i1 !=0)
                                {
                                    strBuff1 = enSmallNumber[i1] + " HUNDRED ";
                                }
                                if (i2!=0)
                                {
                                    if (i2==1)
                                    {
                                        strBuff2 = enSmallNumber[i2*10+i3] + " ";
                                    }
                                    else
                                    {
                                        strBuff2 = enLargeNumber[i2-2] + " ";
                                        if (i3 !=0)
                                        {
                                            strBuff3 = enSmallNumber[i3] + " ";
                                        }
                                    }
                                }
                                else
                                {
                                    if (i3 !=0)
                                    {
                                        strBuff3 = enSmallNumber[i3] + " ";
                                    }
                                }
                                engCapital = strBuff1 + strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;    
                            }
                        }
                        else
                        {
                            n = int.Parse(intString.Substring(0,curPoint+1));
                            if (n !=0)
                            {
                                i2 = n/10;      // 取拾位数值
                                i3 = n-i2*10;   // 取个位数值
                                if (i2!=0)
                                {
                                    if (i2==1)
                                    {
                                        strBuff2 = enSmallNumber[i2*10+i3] + " ";
                                    }
                                    else
                                    {
                                        strBuff2 = enLargeNumber[i2-2] + " ";
                                        if (i3 !=0)
                                        {
                                            strBuff3 = enSmallNumber[i3] + " ";
                                        }
                                    }
                                }
                                else
                                {
                                    if (i3 !=0)
                                    {
                                        strBuff3 = enSmallNumber[i3] + " ";
                                    }
                                }
                                engCapital = strBuff2 + strBuff3 + enUnit[k] + " " + engCapital;
                            }
                        }
            
                        ++k;
                        curPoint -= 3;
                    }
                    engCapital = engCapital.TrimEnd();
                }

// 以下处理小数部分
                strBuff2 = "";
                strBuff3 = "";
                n = int.Parse(decString);
                if (n !=0)
                {
                    i2 = n/10;      // 取拾位数值
                    i3 = n-i2*10;   // 取个位数值
                    if (i2!=0)
                    {
                        if (i2==1)
                        {
                            strBuff2 = enSmallNumber[i2*10+i3] + " ";
                        }
                        else
                        {
                            strBuff2 = enLargeNumber[i2-2] + " ";
                            if (i3 !=0)
                            {
                                strBuff3 = enSmallNumber[i3] + " ";
                            }
                        }
                    }
                    else
                    {
                        if (i3 !=0)
                        {
                            strBuff3 = enSmallNumber[i3] + " ";
                        }
                    }

// 将小数字串追加到整数字串后
                    if (engCapital.Length>0)
                    {
                        engCapital = engCapital + " AND CENTS " + strBuff2+strBuff3;   // 有整数部分时
                    }
                    else
                    {
                        engCapital = "CENTS " + strBuff2 + strBuff3;   // 只有小数部分时
                    }
                }

engCapital = engCapital.TrimEnd();
                return engCapital;
            }
            catch
            {
                return "";   // 含非数字字符时,返回零长字串
            }
        }
    }
}

[收藏|转贴]货币金额大写转换库(C#)相关推荐

  1. 【Java】ChineseCurrencyUtils(货币金额大写转换工具类)

    货币金额大写转换工具类 import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalForm ...

  2. JS货币金额大写转换,1.01=壹元零壹分

    代码 对比其他网络分享的代码,此方法新增了零 如1.01为壹元零壹分而不是[壹元壹分] function digitUppercase(n) {var fraction = ['角', '分'];va ...

  3. 中文金额大写转换处理

    2019独角兽企业重金招聘Python工程师标准>>> /** 金额单位(整数) */private final static String[] PRCE_UNIT = new St ...

  4. 【整理】SAP货币汇率转换

    货币汇率转换Demo 一.说明 汇率维护在ERP中可以使用事务代码OB07或者OB08,每次不同币别的汇率更改在正式生产系统中都会新创建一条记录,保存之后会存储在表TCURR中,可以通过函数CONVE ...

  5. libiconv字符集转换库使用方法

    在软件开发中不可避免的需要用到字符集的转换:转换方法很多如自行编写字符集转换库.利用Windows提供之MultiByteToWideChar函数等:自行编写相对周期较长,而利用MultiByteTo ...

  6. Java版 数字金额大写转换

    需求:读入一个浮点数值,将其转化为中文金额的大写形式.如123.45,转化为:壹佰贰拾叁元肆角伍分. 以下是各种情况要完善: 1. 当金额为整数,只表示整数部分,省略小数部分,并添加"整&q ...

  7. libiconv字符集转换库在C#中的使用

    <libiconv字符集转换库使用方法>一文中说到了libiconv可以实现不同字符集的转换.比如GBK转BIG5等.在项目中因为需要,找到这个库.可是这个库在C#中没有很好的支持.不过, ...

  8. 大数值金额大写转换(C语言)

    关于大数值金额大写转换,在财务管理的应用方面没什么意义.一般来说,千亿级,万亿级的数值就够了.因为在国家级层面是以亿为单位的,也就表达为千万亿,万万亿.在企业层面数值金额转换设置到千亿.万亿就行了.大 ...

  9. 数字金额大写转换Java工具类

    Mark一下: 摘取自 若依框架com.hanhua.common.core.text.Convert /*** 数字金额大写转换 先写个完整的然后将如零拾替换成零** @param n 数字* @r ...

最新文章

  1. 汇编寄存器(内存访问)基础知识之三---mov指令
  2. 虚拟机上的ubuntu安装vmware tools
  3. javaweb学习总结(十四)——JSP原理
  4. 51Nod 1102 面积最大的矩形 +1272 最大距离 单调栈
  5. 【转】我的第一个Python小程序
  6. 7-19 求链式线性表的倒数第K项 (20 分)(思路分析+极简代码+超容易理解)
  7. kubelet内存异常分析
  8. C#常用的文件操作 (转)
  9. 教师使用计算机职责,教师办公室计算机使用制度
  10. java final定义_Java中final关键字的用法
  11. ASP.NET缓存中Cache过期的三种策略
  12. 逆向工程之-数值原码和补码
  13. JSPSSM316的网上水果生鲜销售商城系统java毕业设计成品源码介绍
  14. kaggle--猫狗数据集分类
  15. NoClassDefFoundError: Could not initialize class org.apache.kafka.common.record.Compressio
  16. 计算机ppt上超链接咋设置,ppt查看器_ppt图片链接接怎么设置打开方式是图片查看器?_ppt超链接打开方式...
  17. VMware Ubuntu18.10与Win10共享文件夹
  18. 百度广告屏蔽及游戏推广屏蔽
  19. 在Windows下批量修改文件后缀(ren命令-rename)
  20. 微信浏览器字体调整 PHP,微信h5禁止微信内置浏览器调整字体大小-爬坑

热门文章

  1. 立体匹配——A Large Dataset to Train Convolutional Networks for Disparity, Optical Flow, and Scene Flow Es
  2. 长平之战后的秦赵又一次决战——邯郸保卫战
  3. 钉钉小程序编译时提示 ‘dd is not defined‘
  4. ABAP: 循环加和查询
  5. mysql-删除语句汇总
  6. PowerShell : 如何设置输出颜色,Format-Color让黑乎乎的窗口丰富起来
  7. Android 智能遥控器源码,基于Android手机的智能遥控器设计
  8. SAP CRM BOL collection find_by_property
  9. 升级iOS CocoaPods 版本
  10. 1267 'Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_gener