您的位置:首页 > 其它

将小写金额转换成人民币大写金额

2008-12-02 14:02 507 查看
这个是好久以前用到的,最近又有人问到,所以拿出来晒晒。

/// <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
;
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: