數字轉大寫

轉載:http://www.oschina.net/code/snippet_102306_4705c#

1.JS實現方法spa

static string ConvertToChinese(double x) 
    { 
        string s = x.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A"); 
        string d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}"); 
        return Regex.Replace(d, ".", m => "負元空零壹貳叄肆伍陸柒捌玖空空空空空空空分角拾佰仟萬億兆京垓秭穰"[m.Value[0] - '-'].ToString()); 
    } .net

2.C#實現方法code

private static String[] Ls_ShZ ={ "零" , "壹" , "貳" , "叄" , "肆" , "伍" , "陸" , "柒" , "捌" , "玖" , "拾" };
private static String[] Ls_DW_Zh ={ "元" , "拾" , "佰" , "仟" , "萬" , "拾" , "佰" , "仟" , "億" , "拾" , "佰" , "仟" , "萬" };
private static String[] Num_DW ={ "" , "拾" , "佰" , "仟" , "萬" , "拾" , "佰" , "仟" , "億" , "拾" , "佰" , "仟" , "萬" };
private static String[] Ls_DW_X ={ "角" , "分" };
 
/// <summary>
/// 金額小寫轉中文大寫。
/// 整數支持到萬億;小數部分支持到分(超過兩位將進行Banker舍入法處理)
/// </summary>
/// <param name="Num">須要轉換的雙精度浮點數</param>
/// <returns>轉換後的字符串</returns>
public static String NumGetStr(Double Num)
{
     Boolean iXSh_bool = false ; //是否含有小數,默認沒有(0則視爲沒有)
     Boolean iZhSh_bool = true ; //是否含有整數,默認有(0則視爲沒有)
 
     string NumStr; //整個數字字符串
     string NumStr_Zh; //整數部分
     string NumSr_X = "" ; //小數部分
     string NumStr_DQ; //當前的數字字符
     string NumStr_R = "" ; //返回的字符串
 
     Num = Math.Round(Num, 2); //四捨五入取兩位
 
     //各類非正常狀況處理
     if (Num < 0)
         return "不轉換欠條" ;
     if (Num > 9999999999999.99)
         return "很難想象誰會有這麼多錢!" ;
     if (Num == 0)
         return Ls_ShZ[0];
 
     //判斷是否有整數
     if (Num < 1.00)
         iZhSh_bool = false ;
 
     NumStr = Num.ToString();
 
     NumStr_Zh = NumStr; //默認只有整數部分
     if (NumStr_Zh.Contains( "." ))
     { //分開整數與小數處理
         NumStr_Zh = NumStr.Substring(0, NumStr.IndexOf( "." ));
         NumSr_X = NumStr.Substring((NumStr.IndexOf( "." ) + 1), (NumStr.Length - NumStr.IndexOf( "." ) - 1));
         iXSh_bool = true ;
     }
 
 
     if (NumSr_X == "" || int .Parse(NumSr_X) <= 0)
     { //判斷是否含有小數部分
         iXSh_bool = false ;
     }
 
     if (iZhSh_bool)
     { //整數部分處理
         NumStr_Zh = Reversion_Str(NumStr_Zh); //反轉字符串
 
         for ( int a = 0; a < NumStr_Zh.Length; a++)
         { //整數部分轉換
             NumStr_DQ = NumStr_Zh.Substring(a, 1);
             if ( int .Parse(NumStr_DQ) != 0)
                 NumStr_R = Ls_ShZ[ int .Parse(NumStr_DQ)] + Ls_DW_Zh[a] + NumStr_R;
             else if (a == 0 || a == 4 || a == 8)
             {
                 if (NumStr_Zh.Length > 8 && a == 4)
                     continue ;
                 NumStr_R = Ls_DW_Zh[a] + NumStr_R;
             }
             else if ( int .Parse(NumStr_Zh.Substring(a - 1, 1)) != 0)
                 NumStr_R = Ls_ShZ[ int .Parse(NumStr_DQ)] + NumStr_R;
 
         }
 
         if (!iXSh_bool)
             return NumStr_R + "整" ;
 
         //NumStr_R += "零";
     }
 
     for ( int b = 0; b < NumSr_X.Length; b++)
     { //小數部分轉換
         NumStr_DQ = NumSr_X.Substring(b, 1);
         if ( int .Parse(NumStr_DQ) != 0)
             NumStr_R += Ls_ShZ[ int .Parse(NumStr_DQ)] + Ls_DW_X[b];
         else if (b != 1 && iZhSh_bool)
             NumStr_R += Ls_ShZ[ int .Parse(NumStr_DQ)];
     }
 
     return NumStr_R;
 
}
相關文章
相關標籤/搜索