程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中將小寫金額轉換為大寫金額 性能比較 循環int.MaxValue / 1000次我用了14秒,他的

C#中將小寫金額轉換為大寫金額 性能比較 循環int.MaxValue / 1000次我用了14秒,他的

編輯:C#入門知識

 

看到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; 

            }    

        }

    }

}

這是打印出來的圖片

 

 

\其它我也不多說了

  摘自:快樂你和我

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved