1. 程式人生 > >數字人民幣(RMB)轉化為大寫漢字表達

數字人民幣(RMB)轉化為大寫漢字表達

ret 表達 convert uri == 數組 += format global

using System.Text;

/// <summary>
/// ToChineseValue 的摘要說明
/// 人民幣(RMB)轉化為大寫字母
/// </summary>
public class ToChineseValue
{
private enum chineseChar { 零, 壹, 貳, 叁, 肆, 伍, 陸, 柒, 捌, 玖 };
private enum charValue { 個 = 1, 十, 百, 千 };
private enum c { 元 = 1, 萬, 億, 兆 };
private enum afterPoint { 角, 分 };


public ToChineseValue()
{
//
// TODO: 在此處添加構造函數邏輯
//
}
public static string toChineseChar(decimal d)
{
decimal flag = 0;
if (d < 0)
{
flag = d;
d = -d;
}

string strChinese = "";
string nextString = "";

System.Globalization.NumberFormatInfo fmat = new System.Globalization.NumberFormatInfo();
fmat.CurrencyDecimalDigits = 2;
fmat.CurrencySymbol = "";
fmat.CurrencyGroupSizes = new int[] { 4, 4, 4, 4 };
fmat.CurrencyGroupSeparator = ",";

string strx = d.ToString("c", fmat);

string[] afterArray = strx.ToString().Split(‘.‘);

char[] prePoint = afterArray[0].ToCharArray();
char[] nextChar = afterArray[1].ToCharArray();

if (System.Convert.ToDecimal(afterArray[0].ToString()) == 0)
{ strChinese = ""; }
else
{
string[] str = afterArray[0].ToString().Split(‘,‘);
int Num = str.Length;
//交錯數組用來放四個一組的數組
char[][] part = new char[Num][];
for (int i = 0; i < str.Length; i++)
{
part[i] = str[i].ToCharArray();
}
for (int i = 0; i < Num; i++)
{
for (int j = 0; j < part[i].Length; j++)
{
//用枚舉完成漢字的轉換
strChinese += ((chineseChar)int.Parse(part[i][j].ToString())).ToString();
//用枚舉完成單位: 個 十 百 千
strChinese += ((charValue)(part[i].Length - j)).ToString();
}
//以下為處理元 萬 億 兆
strChinese += ((c)(part.Length - i)).ToString();
}
}
//處理點號後面的小數部分
if (System.Convert.ToDecimal(afterArray[1].ToString()) == 0 && System.Convert.ToDecimal(afterArray[0].ToString()) != 0)
{
nextString = "整";
}
else
{
for (int i = 0; i < 2; i++)
{
int t = int.Parse(nextChar[i].ToString());
nextString += ((chineseChar)int.Parse(nextChar[i].ToString())).ToString();
nextString += ((afterPoint)(i)).ToString();
if (t == 0)
{
StringBuilder str = new StringBuilder(nextString);
nextString = str.Replace("零零", "零").ToString();
nextString = str.Replace("零角零分", "零元").ToString();
}
}
}
StringBuilder sb = new StringBuilder(strChinese);
for (int i = 0; i < 4; i++)
{
strChinese = sb.Replace("個", "").ToString();
strChinese = sb.Replace("零元", "元").ToString();
strChinese = sb.Replace("零萬", "萬").ToString();
strChinese = sb.Replace("億萬", "億").ToString();
strChinese = sb.Replace("零億", "億").ToString();
strChinese = sb.Replace("零十", "零").ToString();
strChinese = sb.Replace("零百", "零").ToString();
strChinese = sb.Replace("零千", "零").ToString();
strChinese = sb.Replace("零零", "零").ToString();
strChinese = sb.Replace("零角零分", "整").ToString();
}
if (flag >= 0)
{
return strChinese + nextString;
}
return "負" + strChinese + nextString;
}
}

數字人民幣(RMB)轉化為大寫漢字表達