日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

人民币大小写转换

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人民币大小写转换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace HKH.Common
{
?/// <summary>
?/// 人民幣大小寫格式轉換
?/// </summary>
?/// <remarks> Create By Lwt on 2006/09/23
?/// </remarks>
?public class clsRMB
?{
??private clsRMB()
??{
??}

??#region 格式化

??/// <summary>
??/// 格式化(大寫轉小寫)
??/// </summary>
??/// <param name="strRMB"></param>
??/// <returns></returns>
??public static double Format(string strRMB)
??{
???try
???{
????//正則表達式,驗證第一位是否阿拉伯數字,確定轉換格式
????//1.5億----混寫格式
????if(Regex.IsMatch(strRMB,"^//d"))
????{
?????//去掉元單位
?????strRMB = Regex.Replace(strRMB,"元|圓","");
?????char temp = strRMB[strRMB.Length - 1];
?????if (temp == '萬' || temp == '萬' || temp == '億')
?????{
??????return Convert.ToDouble(strRMB.Substring(0,strRMB.Length - 1)) * Math.Pow(10,GetExp(temp));
?????}
?????else
?????{
??????return Convert.ToDouble(strRMB);
?????}
????}
????//壹億伍千萬-----大寫格式
????else?
????{
?????return Eval(strRMB);
????}

???}
???catch
???{
????return -1;
???}
??}

??/// <summary>
??/// 格式化(小寫轉大寫)
??/// </summary>
??/// <param name="numRMB"></param>
??/// <returns></returns>
??public static string Format(double numRMB)
??{
???try
???{
????if( 0 == numRMB)
?????return "零元整";

????StringBuilder szRMB = new StringBuilder();

????//乘100以格式成整型,便于處理
????ulong iRMB = Convert.ToUInt64(numRMB * 100);

????szRMB.Insert(0,ToUpper(Convert.ToInt32(iRMB % 100),-2));
??
????//去掉原來的小數位
????iRMB = iRMB / 100;

????int iUnit = 0;

????//以每4位為一個單位段進行處理,所以下邊除以10000
????while(iRMB != 0)
????{
?????szRMB.Insert(0,ToUpper(Convert.ToInt32(iRMB % 10000),iUnit ));
?????iRMB = iRMB / 10000;
?????iUnit += 4;
????}
??????
????string strRMB = szRMB.ToString();
????
????//格式修正
????strRMB = Regex.Replace(strRMB,"零+","零");
????strRMB = strRMB.Replace("元零整","元整");
????strRMB = strRMB.Replace("零元","元");

????return strRMB.Trim('零');
???}
???catch
???{
????return "";
???}
??}

??#endregion

??#region 私有方法

??/// <summary>
??/// 計算表達式(大寫表達式求值)
??/// </summary>
??/// <param name="strRMB"></param>
??/// <returns></returns>
??private static double Eval(string strRMB)
??{
???try
???{
????if (null == strRMB )
?????return 0;

????strRMB = Replace(strRMB,false);

????if ("" == strRMB)
?????return 0;

????#region 利用位權進行計算

????//基礎指數
????int basicExp = 0;
????//當前指數
????int currExp = 0;

????double numRMB = 0;

????for(int i = strRMB.Length - 1; i > -1 ; i --)
????{
?????char temp = strRMB[i];

?????if (temp == '元' || temp == '萬' || temp == '億' || temp == '圓' || temp == '萬' )
?????{
??????basicExp = GetExp(temp);
??????currExp = 0;

??????continue;
?????}
?????else
?????{
??????if(Regex.IsMatch(temp.ToString(),"^//d"))
??????{
???????numRMB = numRMB + Convert.ToInt32(temp.ToString()) * Math.Pow(10,(basicExp + currExp));
??????}
??????else
??????{
???????currExp = GetExp(temp);
??????}

?????}
????}

????#endregion

????return numRMB;
???}
???catch
???{
????return -1;
???}
??}

??/// <summary>
??/// 計算表達式(小寫數值求大寫字符串)
??/// </summary>
??/// <param name="numRMB"></param>
??/// <param name="iUnit"></param>
??/// <returns></returns>
??private static string ToUpper(int numRMB,int iUnit)
??{
???try
???{
????if( 0 == numRMB )
????{
?????if (iUnit == -2)
?????{
??????return "整";
?????}
?????
?????if (iUnit == 0)
?????{
??????return "元";
?????}

?????return "零";
????}

????StringBuilder szRMB = new StringBuilder();

????string strRMB = "";
????
????#region 對角/分做特殊處理

????if (iUnit == -2)
????{
?????int jiao = numRMB / 10;
?????int fen = numRMB % 10;

?????if (jiao > 0)
?????{
??????szRMB.Append(jiao);
??????szRMB.Append(GetUnit(-1));

??????if ( fen > 0)
??????{
???????szRMB.Append(fen);
???????szRMB.Append(GetUnit(-2));
??????}
?????}
?????else
?????{
??????szRMB.Append(fen);
??????szRMB.Append(GetUnit(-2));
?????}

?????return Replace(szRMB.ToString(),true);
????}

????#endregion

????#region 以下為整數部分正常處理

????strRMB = numRMB.ToString("0000");

????//前一位是否是0
????bool hasZero = false;
????
????for ( int i = 0; i < strRMB.Length; i++ )
????{
?????//只有四位,最高位為‘千’,所以下邊的3-i為單位修正
?????if ( ( 3-i ) > 0)
?????{
??????if( '0' != strRMB[i] )
??????{
???????szRMB.Append(strRMB[i]);
???????szRMB.Append(GetUnit( 3-i ));
???????hasZero = false;
??????}
??????else
??????{
???????if( !hasZero )
????????szRMB.Append(strRMB[i]);

???????hasZero = true;
??????}
?????}
?????//最后一位,特別格式處理
?????//如最后一位是零,則單位應在零之前
?????else
?????{
??????if( '0' != strRMB[i] )
??????{
???????szRMB.Append(strRMB[i]);
???????szRMB.Append(GetUnit( iUnit ));
???????hasZero = false;
??????}
??????else
??????{
???????if (hasZero)
???????{
????????szRMB.Insert(szRMB.Length - 1,GetUnit( iUnit ));
???????}
???????else
???????{
????????szRMB.Append(GetUnit( iUnit ));
????????szRMB.Append(strRMB[i]);
???????}
??????}
?????}
????}

????//轉換大寫后返回
????return Replace(szRMB.ToString(),true);

????#endregion
???}
???catch
???{
????return "";
???}
??}

??/// <summary>
??/// 將中文大寫換成阿拉伯數字
??/// </summary>
??/// <param name="strRMB"></param>
??/// <param name="toUpper">true--轉換為大寫/false--轉換為小寫</param>
??/// <returns></returns>
??private static string Replace(string strRMB,bool toUpper)
??{
???if(toUpper)
???{
????strRMB = strRMB.Replace("0","零");
????strRMB = strRMB.Replace("1","壹");
????strRMB = strRMB.Replace("2","貳");
????strRMB = strRMB.Replace("3","叁");
????strRMB = strRMB.Replace("4","肆");
????strRMB = strRMB.Replace("5","伍");
????strRMB = strRMB.Replace("6","陸");
????strRMB = strRMB.Replace("7","柒");
????strRMB = strRMB.Replace("8","捌");
????strRMB = strRMB.Replace("9","玖");
???}
???else
???{
????strRMB = strRMB.Replace("零","0");
????strRMB = strRMB.Replace("壹","1");
????strRMB = strRMB.Replace("貳","2");
????strRMB = strRMB.Replace("叁","3");
????strRMB = strRMB.Replace("肆","4");
????strRMB = strRMB.Replace("伍","5");
????strRMB = strRMB.Replace("陸","6");
????strRMB = strRMB.Replace("柒","7");
????strRMB = strRMB.Replace("捌","8");
????strRMB = strRMB.Replace("玖","9");
???}
???return strRMB;
??}

??/// <summary>
??/// 獲取單位名稱
??/// </summary>
??/// <param name="iCode"></param>
??/// <returns></returns>
??private static string GetUnit(int iCode)
??{
???switch(iCode)
???{
????case -2:
?????return "分";
????case -1:
?????return "角";
????case 0:
?????return "元";
????case 1:
?????return "拾";
????case 2:
?????return "佰";
????case 3:
?????return "仟";
????case 4:
?????return "萬";
????case 8:
?????return "億";
????default:
?????return "";
???}
??}

??/// <summary>
??/// 獲取位權指數
??/// </summary>
??/// <param name="cUnit"></param>
??/// <returns></returns>
??private static int GetExp(char cUnit )
??{
???switch(cUnit)
???{
????case '分':
?????return -2;
????case '角':
?????return -1;
????case '元':
????case '圓':
?????return 0;
????case '十':
????case '拾':
?????return 1;
????case '百':
????case '佰':
?????return 2;
????case '千':
????case '仟':
?????return 3;
????case '萬':
????case '萬':
?????return 4;
????case '億':
?????return 8;
????default:
?????return 0;
???}
??}

??#endregion

?}
}
?


?

總結

以上是生活随笔為你收集整理的人民币大小写转换的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。