看到Danny.lis 寫的C#中將小寫金額轉換為大寫金額 ,想起已經我也弄個一個類似功能,但那時候我畢業也好幾個月,但我感覺還是比他的性能要好點,於是把那時候的代碼找了出來,貼上來大家測試測試
public static string GetToZHString(float value)
{
string str = "";
string[] s = { "分", "角", "元", "十", "百", "千", "萬", "十", "百", "千", "億", "十", "百", "千" };
char[] c = { '零', '壹', '貳', '三', '肆', '伍', '陸', '柒', '捌', '玖' };
bool b = value < 0;
if (b)
{
value = 0 - value;str = "負";
}
string temp = value.ToString("#0.00").Replace(".", string.Empty);
int count = temp.Length - 1;
for (int i = 0; i <= count; i++)
{
str += c[int.Parse(temp[i].ToString())] + s[count - i];
}
return str;
}
我在把他的代碼貼出來
public static string MoneyToChinese(string strAmount)
{
string functionReturnValue = null;
bool IsNegative = false; // 是否是負數
if (strAmount.Trim().Substring(0, 1) == "-")
{
// 是負數則先轉為正數
strAmount = strAmount.Trim().Remove(0, 1);
IsNegative = true;
}
string strLower = null;
string strUpart = null;
string strUpper = null;
int iTemp = 0;
// 保留兩位小數123.489→123.49 123.4→123.4
strAmount = Math.Round(double.Parse(strAmount), 2).ToString();
if (strAmount.IndexOf(".") > 0)
{
if (strAmount.IndexOf(".") == strAmount.Length - 2)
{
strAmount = strAmount + "0";
}
}
else
{
strAmount = strAmount + ".00";
}
strLower = strAmount;
iTemp = 1;
strUpper = "";
while (iTemp <= strLower.Length)
{
switch (strLower.Substring(strLower.Length - iTemp, 1))
{
case ".":
strUpart = "圓";
break;
case "0":
strUpart = "零";
break;
case "1":
strUpart = "壹";
break;
case "2":
strUpart = "貳";
break;
case "3":
strUpart = "三";
break;
case "4":
strUpart = "肆";
break;
case "5":
strUpart = "伍";
break;
case "6":
strUpart = "陸";
break;
case "7":
strUpart = "柒";
break;
case "8":
strUpart = "捌";
break;
case "9":
strUpart = "玖";
break;
}
switch (iTemp)
{
case 1:
strUpart = strUpart + "分";
break;
case 2:
strUpart = strUpart + "角";
break;
case 3:
strUpart = strUpart + "";
break;
case 4:
strUpart = strUpart + "";
break;
case 5:
strUpart = strUpart + "拾";
break;
case 6:
strUpart = strUpart + "佰";
break;
case 7:
strUpart = strUpart + "仟";
break;
case 8:
strUpart = strUpart + "萬";
break;
case 9:
strUpart = strUpart + "拾";
break;
case 10:
strUpart = strUpart + "佰";
break;
case 11:
strUpart = strUpart + "仟";
break;
case 12:
strUpart = strUpart + "億";
break;
case 13:
strUpart = strUpart + "拾";
break;
case 14:
strUpart = strUpart + "佰";
break;
case 15:
strUpart = strUpart + "仟";
break;
case 16:
strUpart = strUpart + "萬";
break;
default:
strUpart = strUpart + "";
break;
}
strUpper = strUpart + strUpper;
iTemp = iTemp + 1;
}
strUpper = strUpper.Replace("零拾", "零");
strUpper = strUpper.Replace("零佰", "零");
strUpper = strUpper.Replace("零仟", "零");
strUpper = strUpper.Replace("零零零", "零");
strUpper = strUpper.Replace("零零", "零");
strUpper = strUpper.Replace("零角零分", "整");
strUpper = strUpper.Replace("零分", "整");
strUpper = strUpper.Replace("零角", "零");
strUpper = strUpper.Replace("零億零萬零圓", "億圓");
strUpper = strUpper.Replace("億零萬零圓", "億圓");
strUpper = strUpper.Replace("零億零萬", "億");
strUpper = strUpper.Replace("零萬零圓", "萬圓");
strUpper = strUpper.Replace("零億", "億");
strUpper = strUpper.Replace("零萬", "萬");
strUpper = strUpper.Replace("零圓", "圓");
strUpper = strUpper.Replace("零零", "零");
// 對壹圓以下的金額的處理
if (strUpper.Substring(0, 1) == "圓")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "零")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "角")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "分")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "整")
{
strUpper = "零圓整";
}
functionReturnValue = strUpper;
if (IsNegative == true)
{
return "負" + functionReturnValue;
}
else
{
return functionReturnValue;
}
}
我想應該還是我的性能會比較好吧? 因為我只會點C#所有自己也不怎麼會測試性能 就簡單的循環了int.MaxValue/1000次 顯示我的比他快6秒左右
10月25日更新
看到3、6樓的回復我有點失望,於是為了證明測試性能我把他改寫成與Danny.lis一樣的結果在拿出來測試大家請看結果
這是代碼 不過加班加到剛剛才下班所有代碼寫的就有點凌亂了 沒整理 大家賴點心吧
view sourceprint?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
var temps = DateTime.Now;
Console.WriteLine(temps.ToString("yyyy-MM-dd HH:mm:ss ") + temps.Millisecond.ToString());
for (int i = 0; i <int.MaxValue / 1000; i++)
{
GetToZHString(9002820002.10D);
}
temps = DateTime.Now;
Console.WriteLine(temps.ToString("yyyy-MM-dd HH:mm:ss ") + temps.Millisecond.ToString());
temps = DateTime.Now;
Console.WriteLine(temps.ToString("yyyy-MM-dd HH:mm:ss ") + temps.Millisecond.ToString());
for (int i = 0; i < int.MaxValue / 1000; i++)
{
MoneyToChinese("9002820002.10");
}
temps = DateTime.Now;
Console.WriteLine(temps.ToString("yyyy-MM-dd HH:mm:ss ") + temps.Millisecond.ToString());
Console.WriteLine(GetToZHString(9002820002.01D));
Console.WriteLine(MoneyToChinese("9002820002.01"));
Console.Read();
}
public static string GetToZHString(double value)
{
string str = "";
string[] s = { "分", "角", "元", "十", "百", "千", "萬", "十", "百", "千", "億", "十", "百", "千" };
char[] c = { '零', '壹', '貳', '三', '肆', '伍', '陸', '柒', '捌', '玖' };
bool b = value < 0; if (b)
{
value = 0 - value;
str = "負";
}
string temp = value.ToString("#0.00").Replace(".", string.Empty);
int count = temp.Length - 1;
for (int i = 0; i <= count; i++)
{
int k = int.Parse(temp[i].ToString());
if (k == 0)
{
if (i == count - 1)
{
if (temp[i + 1] == '0')
{
str += "整"; break;
}
}
if (temp[i - 1] == '0')
{
continue;
}
else
{
if (s[count - i] == "萬" || s[count - i] == "億")
{
str += s[count - i];
}
str += "零";
continue;
}
}
str += c[k] + s[count - i];
}
return str.Replace("角零", "角整");
}
public static string MoneyToChinese(string strAmount)
{
string functionReturnValue = null;
bool IsNegative = false; // 是否是負數
if (strAmount.Trim().Substring(0, 1) == "-")
{
// 是負數則先轉為正數
strAmount = strAmount.Trim().Remove(0, 1);
IsNegative = true;
}
string strLower = null;
string strUpart = null;
string strUpper = null;
int iTemp = 0;
// 保留兩位小數123.489→123.49 123.4→123.4
strAmount = Math.Round(double.Parse(strAmount), 2).ToString();
if (strAmount.IndexOf(".") > 0)
{
if (strAmount.IndexOf(".") == strAmount.Length - 2)
{
strAmount = strAmount + "0";
}
}
else
{
strAmount = strAmount + ".00";
}
strLower = strAmount;
iTemp = 1;
strUpper = "";
while (iTemp <= strLower.Length)
{
switch (strLower.Substring(strLower.Length - iTemp, 1))
{
case ".":
strUpart = "圓";
break;
case "0":
strUpart = "零";
break;
case "1": strUpart = "壹"; break;
case "2": strUpart = "貳"; break;
case "3": strUpart = "三"; break;
case "4": strUpart = "肆"; break;
case "5": strUpart = "伍"; break;
case "6": strUpart = "陸"; break;
case "7": strUpart = "柒"; break;
case "8": strUpart = "捌"; break;
case "9": strUpart = "玖"; break;
} switch (iTemp)
{
case 1: strUpart = strUpart + "分"; break;
case 2: strUpart = strUpart + "角"; break;
case 3: strUpart = strUpart + ""; break;
case 4: strUpart = strUpart + ""; break;
case 5: strUpart = strUpart + "拾"; break;
case 6: strUpart = strUpart + "佰"; break;
case 7: strUpart = strUpart + "仟"; break;
case 8: strUpart = strUpart + "萬"; break;
case 9: strUpart = strUpart + "拾"; break;
case 10: strUpart = strUpart + "佰"; break;
case 11: strUpart = strUpart + "仟"; break;
case 12: strUpart = strUpart + "億"; break;
case 13: strUpart = strUpart + "拾"; break;
case 14: strUpart = strUpart + "佰"; break;
case 15: strUpart = strUpart + "仟"; break;
case 16: strUpart = strUpart + "萬"; break;
default: strUpart = strUpart + ""; break;
}
strUpper = strUpart + strUpper;
iTemp = iTemp + 1;
}
strUpper = strUpper.Replace("零拾", "零");
strUpper = strUpper.Replace("零佰", "零");
strUpper = strUpper.Replace("零仟", "零");
strUpper = strUpper.Replace("零零零", "零");
strUpper = strUpper.Replace("零零", "零");
strUpper = strUpper.Replace("零角零分", "整");
strUpper = strUpper.Replace("零分", "整");
strUpper = strUpper.Replace("零角", "零");
strUpper = strUpper.Replace("零億零萬零圓", "億圓");
strUpper = strUpper.Replace("億零萬零圓", "億圓");
strUpper = strUpper.Replace("零億零萬", "億");
strUpper = strUpper.Replace("零萬零圓", "萬圓");
strUpper = strUpper.Replace("零億", "億");
strUpper = strUpper.Replace("零萬", "萬");
strUpper = strUpper.Replace("零圓", "圓");
strUpper = strUpper.Replace("零零", "零");
// 對壹圓以下的金額的處理
if (strUpper.Substring(0, 1) == "圓")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "零")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "角")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "分")
{
strUpper = strUpper.Substring(1, strUpper.Length - 1);
}
if (strUpper.Substring(0, 1) == "整")
{
strUpper = "零圓整";
}
functionReturnValue = strUpper;
if (IsNegative == true)
{
return "負" + functionReturnValue;
}
else
{
return functionReturnValue;
}
}
}
}
這是打印出來的圖片
其它我也不多說了
摘自:快樂你和我