C#實現(xiàn)將浮點數(shù)表示的貨幣數(shù)量以漢字大寫形式輸出的方法
更新時間:2015年08月13日 12:32:33 作者:北風其涼
這篇文章主要介紹了C#實現(xiàn)將浮點數(shù)表示的貨幣數(shù)量以漢字大寫形式輸出的方法,涉及C#針對浮點數(shù)的遍歷與字符替換操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
本文實例講述了C#實現(xiàn)將浮點數(shù)表示的貨幣數(shù)量以漢字大寫形式輸出的方法。分享給大家供大家參考。具體如下:
1.函數(shù)代碼
注:本段代碼中能轉(zhuǎn)化的最大的數(shù)為(1億億-0.01),如果要轉(zhuǎn)化更大的浮點數(shù),則需要做適當修改。
/// <summary>
/// 將字符型變量轉(zhuǎn)化為大寫漢語數(shù)字
/// </summary>
/// <param name="ch">字符 '0'~'9'</param>
/// <returns></returns>
private static string NumToChr(char ch)
{
switch (ch)
{
case '0': return "零";
case '1': return "壹";
case '2': return "貳";
case '3': return "叁";
case '4': return "肆";
case '5': return "伍";
case '6': return "陸";
case '7': return "柒";
case '8': return "捌";
case '9': return "玖";
default: return "";
}
}
/// <summary>
/// 把數(shù)字轉(zhuǎn)換為大寫數(shù)字
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private static string RMBToChr(double n)
{
//保留小數(shù)點后兩位數(shù)字
string sMoney = n.ToString("#0.00");
StringBuilder sbResult = new StringBuilder();
for (int i = 0; i < sMoney.Length; i++)
{
//遇到小數(shù)點,則后面 A.XX 寫為 A圓X角X分
if (sMoney[i] == '.')
{
sbResult.Append("圓");
//角和分屬性都為0時直接寫整字
if (sMoney[i + 1] == '0' && sMoney[i + 2] == '0')
{
sbResult.Append("整");
break;
}
else
{
//角和分屬性只有在對應位不為0時才寫
if (sMoney[i + 1] != '0')
{
sbResult.Append(NumToChr(sMoney[i + 1]) + "角");
}
if (sMoney[i + 2] != '0')
{
sbResult.Append(NumToChr(sMoney[i + 2]) + "分");
}
else //分為0時也要寫整字
{
sbResult.Append("整");
}
break;
}
}
//非零數(shù)字直接輸出對應數(shù)字和位
if (sMoney[i] != '0')
{
sbResult.Append(NumToChr(sMoney[i]));
//補上相應位的權(quán)
int temp = sMoney.Length - 4 - i;
switch (temp)
{
case 0: break;
case 1: sbResult.Append("拾"); break;
case 2: sbResult.Append("佰"); break;
case 3: sbResult.Append("仟"); break;
case 4: sbResult.Append("萬"); break;
case 5: sbResult.Append("拾"); break;
case 6: sbResult.Append("佰"); break;
case 7: sbResult.Append("仟"); break;
case 8: sbResult.Append("億"); break;
case 9: sbResult.Append("拾"); break;
case 10: sbResult.Append("百"); break;
case 11: sbResult.Append("仟"); break;
case 12: sbResult.Append("萬"); break;
default: throw new Exception("這個數(shù)太大了!");
}
}
else //如果該位數(shù)字為0,則萬位和億位要寫權(quán),多個連續(xù)0就寫一個零
{
int temp = sMoney.Length - 4 - i;
if (temp == 4) { sbResult.Append("萬"); continue; }
else if (temp == 8) { sbResult.Append("億"); continue; }
else if (sMoney[i + 1] == '0') { continue; }
else sbResult.Append("零");
}
}
return sbResult.ToString();
}
2.Main函數(shù)調(diào)用
static void Main(string[] args)
{
//數(shù)字轉(zhuǎn)化為人民幣大寫
Console.WriteLine(RMBToChr(12345));
Console.WriteLine(RMBToChr(60001.215));
Console.WriteLine(RMBToChr(70010001.8));
Console.WriteLine(RMBToChr(10110901.01));
Console.WriteLine(RMBToChr(0.01));
Console.ReadLine();
}
3.運行示例

希望本文所述對大家的C#程序設計有所幫助。
您可能感興趣的文章:
相關(guān)文章
淺析C#?AsyncLocal如何實現(xiàn)Thread間傳值
這篇文章主要是來和大家一起討論一下C#?AsyncLocal如何實現(xiàn)Thread間傳值,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-01-01
詳解C#如何對ListBox控件中的數(shù)據(jù)進行操作
這篇文章主要為大家詳細介紹了C#中對ListBox控件中的數(shù)據(jù)進行的操作,主要包括添加、刪除、清空、選擇、排序等,感興趣的小伙伴可以了解下2024-03-03
C#線程委托BeginInvoke與EndInvoke的用法
這篇文章介紹了C#線程委托BeginInvoke與EndInvoke的用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

