這個是好久以前用到的,最近又有人問到,所以拿出來曬曬。
/// <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;
}
}