C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實(shí)例
更新時(shí)間:2014年05月27日 10:47:46 作者:
這篇文章主要介紹了C#把數(shù)字轉(zhuǎn)換成大寫金額的代碼實(shí)例,例如把200轉(zhuǎn)換成“貳佰元”,需要的朋友可以參考下
實(shí)現(xiàn)代碼:
復(fù)制代碼 代碼如下:
// 例如:(new Money(200)).ToString() == "貳佰元"
namespace Skyiv.Util {
using System.Text;
class Test {
static void Main() {
for (;;) {
System.Console.Write("金額: ");
string s = System.Console.ReadLine();
decimal m;
try {
m = decimal.Parse(s);
} catch {
break;
}
System.Console.WriteLine("大寫: " + new Money(m));
}
}
}
// 該類重載的 ToString() 方法返回的是大寫金額字符串
class Money {
public string Yuan = "元"; // “元”,可以改為“圓”、“盧布”之類
public string Jiao = "角"; // “角”,可以改為“拾”
public string Fen = "分"; // “分”,可以改為“美分”之類
static string Digit = "零壹貳叁肆伍陸柒捌玖"; // 大寫數(shù)字
bool isAllZero = true; // 片段內(nèi)是否全零
bool isPreZero = true; // 低一位數(shù)字是否是零
bool Overflow = false; // 溢出標(biāo)志
long money100; // 金額*100,即以“分”為單位的金額
long value; // money100的絕對(duì)值
StringBuilder sb = new StringBuilder(); // 大寫金額字符串,逆序
// 只讀屬性: "零元"
public string ZeroString {
get {
return Digit[0] + Yuan;
}
}
// 構(gòu)造函數(shù)
public Money(decimal money) {
try {
money100 = (long)(money * 100m);
} catch {
Overflow = true;
}
if (money100 == long.MinValue) Overflow = true;
}
// 重載 ToString() 方法,返回大寫金額字符串
public override string ToString() {
if (Overflow) return "金額超出范圍";
if (money100 == 0) return ZeroString;
string[] Unit = {
Yuan,
"萬",
"億",
"萬",
"億億"
};
value = System.Math.Abs(money100);
ParseSection(true);
for (int i = 0; i < Unit.Length && value > 0; i++) {
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
if (i == 4 && sb.ToString().EndsWith(Unit[2])) sb.Remove(sb.Length - Unit[2].Length, Unit[2].Length);
sb.Append(Unit[i]);
ParseSection(false);
if ((i % 2) == 1 && isAllZero) sb.Remove(sb.Length - Unit[i].Length, Unit[i].Length);
}
if (money100 < 0) sb.Append("負(fù)");
return Reverse();
}
// 解析“片段”: “角分(2位)”或“萬以內(nèi)的一段(4位)”
void ParseSection(bool isJiaoFen) {
string[] Unit = isJiaoFen ? new string[] {
Fen,
Jiao
}: new string[] {
"",
"拾",
"佰",
"仟"
};
isAllZero = true;
for (int i = 0; i < Unit.Length && value > 0; i++) {
int d = (int)(value % 10);
if (d != 0) {
if (isPreZero && !isAllZero) sb.Append(Digit[0]);
sb.AppendFormat("{0}{1}", Unit[i], Digit[d]);
isAllZero = false;
}
isPreZero = (d == 0);
value /= 10;
}
}
// 反轉(zhuǎn)字符串
string Reverse() {
StringBuilder sbReversed = new StringBuilder();
for (int i = sb.Length - 1; i >= 0; i--) sbReversed.Append(sb[i]);
return sbReversed.ToString();
}
}
}
相關(guān)文章
C#實(shí)現(xiàn)掃描局域網(wǎng)內(nèi)的所有IP和端口
這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)掃描局域網(wǎng)內(nèi)的所有IP和端口的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12WPF實(shí)現(xiàn)在控件上顯示Loading等待動(dòng)畫的方法詳解
這篇文章主要介紹了WPF 如何在控件上顯示 Loading 等待動(dòng)畫,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,需要的可以參考一下2023-03-03C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟
這篇文章主要給大家介紹了關(guān)于C#使用InstallerProjects打包桌面應(yīng)用程序的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07C#字符串?dāng)?shù)組轉(zhuǎn)換為整形數(shù)組的方法
這篇文章主要介紹了C#字符串?dāng)?shù)組轉(zhuǎn)換為整形數(shù)組的方法,涉及C#數(shù)組遍歷與轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下2015-06-06學(xué)習(xí)Winform分組類控件(Panel、groupBox、TabControl)
這篇文章主要和大家一起學(xué)習(xí)Winform分組類控件,包括容器控件(Panel),分組框控件(groupBox)和選項(xiàng)卡控件(TabControl)等控件,感興趣的小伙伴們可以參考一下2016-05-05