C# : 新臺幣轉換為金額大寫(轉國字大寫)
最近在做一個項目的臺灣本地化,需要用到新臺幣的金額大寫。用 .NET 實現了轉換金額大寫的 RMB(人民幣)和 NTD(新臺幣)方法。
經過測試,該方法很可靠。
注意:轉換出的結果為臺灣正體。如果需要使用人民幣的大陸簡體大寫寫法,需要轉換為簡體即可。單擊此處瞭解如何進行簡繁轉換。
/// /// 將新臺幣或人民幣轉換為金額大寫形式。
///
/// 要轉換的數值
/// 返回轉換的結果。
public static string GetMoneyUpper(decimal d, MoneyType moneyType)
{
string o = d.ToString();
string dq = "", dh = "";
if (o.Contains("."))
{
dq = o.Split('.')[0];
dh = o.Split('.')[1];
}
else
{
dq = o;
}
string ret = GetMoney(dq, true, "圓", moneyType) + GetMoney(dh, false, "", moneyType);
if (ret.Contains("釐") || ret.Contains("分"))
return cc.ToTraditional(ret);
if (moneyType != MoneyType.NTD)
{
ret = ret.Replace("參", "叄");
}
return cc.ToTraditional(ret + "整");
}
private static string GetMoney(string number, bool left, string lastdw, MoneyType type) // 內部函數。
{
string[] NTD = new string[10] { "零", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };
string[] DW = new string[8] { "釐", "分", "角", "", "拾", "佰", "仟", "萬" };
int first = 4;
string str = "";
if (!left)
{
first = 1;
if (number.Length == 1)
{
number += "00";
}
else if (number.Length == 2)
{
number += "0";
}
else number = number.Substring(0, 3);
}
else
{
if (number.Length >= 9)
{
return GetMoney(number.Substring(0, number.Length - 8), true, "億", type) + GetMoney(number.Substring(number.Length - 8, 8), true, "圓", type);
}
if (number.Length >= 5)
{
return GetMoney(number.Substring(0, number.Length - 4), true, "萬", type) + GetMoney(number.Substring(number.Length - 4, 4), true, "圓", type);
}
}
bool has0 = false;
for (int i = 0; i < number.Length; ++i)
{
int w = number.Length - i + first - 2;
if (int.Parse(number[i].ToString()) == 0)
{
has0 = true;
continue;
}
else
{
if (has0)
{
if (type == MoneyType.RMB)
str += "零";
has0 = false;
}
}
str += NTD [int.Parse(number[i].ToString())];
str += DW[w];
}
if (left)
str += lastdw;
return str;
}
public enum MoneyType
{
/// /// 表示新臺幣。
///
NTD,
/// /// 表示人民幣。
///
RMB
}
© 轉載需附帶本文連結,依 CC BY-NC-SA 4.0 釋出。