將小寫金額轉換成人民幣大寫金額

這個是好久以前用到的,最近又有人問到,所以拿出來曬曬。

 

/// <summary>
  /// 將小寫金額轉換成人民幣大寫金額

  /// </summary>
  public class ChinaMoney
  {
   private static string [] HanDigiStr = {"零","壹","貳","叄","肆","伍","陸","柒","捌","玖"};

   private static string [] HanDiviStr = { "","拾","佰","仟","萬","拾","佰","仟","億",
               "拾","佰","仟","萬","拾","佰","仟","億",
               "拾","佰","仟","萬","拾","佰","仟" };

   private static string PositiveIntegerToHanStr(string NumStr)
   {    
    string RMBStr="";
    int len,n;
    bool hasvalue=false,lastzero=false;  

    len = NumStr.Length;

    for(int i=0;i<len;i++)
    {
     n = NumStr[i] - '0';
     int j=len-i-1;
     if( n!=0 )
     {
      if( lastzero ) RMBStr += HanDigiStr[0];
      RMBStr += HanDigiStr[n];
      RMBStr += HanDiviStr[len-i-1];
      hasvalue = true;
     }
     else
     {
      if( j==8 || j==4 && hasvalue )
       RMBStr += HanDiviStr[len-i-1];
     }
     if( j%8==0 ) hasvalue = false;
     lastzero = (n==0) && (j%4!=0);
    }

    if( RMBStr.Length==0 ) return HanDigiStr[0];
    return RMBStr;
   }

   public static string NumToRMBStr(double val)
   {
    if(val>100000000000) return "數字過大!";
    string SignStr="",TailStr="";
    double fraction=0;
    Int64 integer=0;
    if( val<0 )
    {
     val = -val;
     SignStr = "負";
    }

    integer=Convert.ToInt64(val-val%1);
    int jiao,fen;


    fraction = Math.Round(val%1,2);
    fen = Convert.ToInt32((fraction*100)%10);//分

    jiao = Convert.ToInt32((fraction*100-fen)/10);//角
    if( jiao==0 && fen==0 )
    {
     TailStr = "整";
    }
    else
    {
     TailStr = HanDigiStr[jiao];
     if( jiao!=0 )
      TailStr += "角";
     if( integer==0 && jiao==0 )
      TailStr = "";
     if( fen!=0 )
      TailStr += HanDigiStr[fen] + "分";
    }
    return SignStr+PositiveIntegerToHanStr( integer.ToString() )+"元"+TailStr;
   }
  }

發佈了35 篇原創文章 · 獲贊 3 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章