阿拉伯数字转中文大小写, 使用InternationalNumericFormatter和正规表示式Regular Expressions

之前有写过有关钱的系统,所以不免俗会跟银行一样有阿拉伯数字转中文大小写的需求,使用这篇文章分享一下如何使用正规表示式Regular Expressions来检查输入的金额,并使用EastAsiaNumericFormatter转换成中文大小写。

之前有写过有关钱的系统,所以不免俗会跟银行一样有阿拉伯数字转中文大小写的需求,使用这篇文章分享一下如何使用正规表示式Regular Expressions来检查输入的金额,并使用EastAsiaNumericFormatter转换成中文大小写。

首先正规表示式在微软的API中就可以直接拿来使用,不需要再额外下载第三方套件或API

using System.Text.RegularExpressions;

这个案例中我要判断的是输入的金额的格式,由于输入的金额是可以接受负数金额,且还有包含人民币的部分,CN还是有在使用小数位的金额的(例如0.5元),另外有的金额输入会在千位的前方加上逗号(例如45,150),所以在正规表示式的表示就必须包含这几个规则。

PS.我在前面就把逗号先用Replace处理掉了会单纯一点,但其实可以纳入正规表示式的规则里面。

   sInputValue = sInputValue.Replace(",", ""); //Edit by Second 2016.06.27 有的金額欄位會有 4,110 這種方式顯示
            string sResult = string.Empty;
            string sRegexNum = @"^[-+]?\d+(\.\d+)?$";  //判斷是否為數字的正規表示式
            string sRegexInt = @"^-?\d+$";  //判斷是否為整數的正規表示式

要使用EastAsiaNumericFormatter转换成金额必须先下载安装微软.NET推出相关的套件 http://www.microsoft.com/zh-tw/download/details.aspx?id=18970

安装完毕后把InternationalNumericFormatter.dll加入到专案里面。

呼叫时,取决于你要取得大写或是小写亦或者是货币名称传入不同的参数(L、Ln、Lc、Lt),但我使用的这版本的API有一个Bug,转换后的中文大小写如果百位或十位前面是一的话会不显示,所以要自行另外补上。

并在最后如果该数字是整数还要加上多少元整。

//標準格式(L):又稱大寫
                //普通格式(Ln):又稱小寫
                //貨幣格式(Lc):用來表示貨幣
                //字譯格式(Lt):以數字符號字元表現數值資料,只支援日文
                //解決EastAsiaNumericFormatter 轉換後的數字 如果是金額會有顯示的異常
                //轉換後4110 = 四千一百十  ==> 十之前需要多補一個一
                string sInput =
                    EastAsiaNumericFormatter.FormatWithCulture(
                    moneyChar ? "L" : "Ln", dInput,
                    null, new CultureInfo("zh-TW"));
                string pattern = moneyChar ?
                        "[^壹貳參肆伍陸柒捌玖]拾" :
                        "[^一二三四五六七八九]十";
                string one = moneyChar ? "壹" : "一";
                string res = Regex.Replace(sInput, pattern, m =>
                {
                    return m.Value.Substring(0, 1) + one +
                        m.Value.Substring(1);
                });


                if(moneyChar){
                    if (bInt == true ) //只有整數的部分
                    {
                        sResult = res + "元整";
                    }
                    else { //含有小數金額的部分 須轉換成角和分
                        sResult = CovertDecPart(res);
                    }
                }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值