C#把數字轉換成年夜寫金額的代碼實例。本站提示廣大學習愛好者:(C#把數字轉換成年夜寫金額的代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C#把數字轉換成年夜寫金額的代碼實例正文
完成代碼:
// 例如:(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 = "零壹貳三肆伍陸柒捌玖"; // 年夜寫數字
bool isAllZero = true; // 片斷內能否全零
bool isPreZero = true; // 低一名數字能否是零
bool Overflow = false; // 溢出標記
long money100; // 金額*100,即以“分”為單元的金額
long value; // money100的相對值
StringBuilder sb = new StringBuilder(); // 年夜寫金額字符串,逆序
// 只讀屬性: "零元"
public string ZeroString {
get {
return Digit[0] + Yuan;
}
}
// 結構函數
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("負");
return Reverse();
}
// 解析“片斷”: “角分(2位)”或“萬之內的一段(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;
}
}
// 反轉字符串
string Reverse() {
StringBuilder sbReversed = new StringBuilder();
for (int i = sb.Length - 1; i >= 0; i--) sbReversed.Append(sb[i]);
return sbReversed.ToString();
}
}
}