13,825
社区成员
发帖
与我相关
我的任务
分享
String __fastcall TForm1::NumToCnum(long num)
{
String cstr=" 一二三四五六七八九";
String str=" 十 百 千 万 十 百 千 亿 十 百 千 万十万百万千万";
String n=num;
String c,cc,cn="",b="",x="零";
for(int i=1;i<=n.Length();i++)
{
c=(n.SubString(i-1,1)==0 && n.SubString(i,1)!=0)?x+cstr.SubString(2*n.SubString(i,1).ToInt()+1,2).Trim():cstr.SubString(2*n.SubString(i,1).ToInt()+1,2).Trim();//取数字
cc=(n.SubString(i,1)=="0" && n.Length()-i!=4 && n.Length()-i!=9)?b:(str.SubString(4*(n.Length()-i)+1,4).Trim()) ;//取基数
cn+=(n.Length()+1-i)==1?c:c+cc.Trim(); //组成中文数字
}
return cn.Trim();
}
/*
作了如下简单测试:
20 ->二十
300 -> 三百
405 -> 四百零五
123 ->一百二十三
300400 ->三十万零四百
1020304050 -> 一十亿零二千零三十万零四千零五十
123456789 -> 一亿二千三百四十五万六千七百八十九
*/
//---------------------------------------------------------------------------
AnsiString CurrToChnNum(AnsiString CurrNum, bool DisplayZero, int SpaceNum)
//参数说明:CurrNum 这个是要转化的数值
// DisplayZero 是否要显示零 如:(显示零)壹佰 零拾 叁元 伍角 伍分
// SpaceNum 字符间的空格数,默认值为2
{
//数值转换为大写金额
//18个数字单位
const String Dw[18] = {"分","角","圆","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟","兆","拾","佰","仟"};
//10个数码
const String Num[10] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
AnsiString sTemp;
// sTemp = FormatFloat("0.00", CurrNum); //格式化数值
sTemp = CurrNum;
sTemp.Delete(sTemp.Pos(".")+3,sTemp.Length()-sTemp.Pos("."));
sTemp.Delete(sTemp.Pos("."), 1); //去掉小数点
if ( sTemp.Length() > 18 ) //是否超长?
{
MessageDlg("数值位数太多,不能处理!",mtError,TMsgDlgButtons() << mbYes,0);
return NULL;
}
AnsiString sRusult = " "; //字串的头部字符,根据喜好
for (int i = sTemp.Length(); i > 0; i--) //开始加工
{
if ( !DisplayZero && i > 2 && sTemp[sTemp.Length() - i + 1] - 48 == 0 )
continue;
sRusult += Num[sTemp[sTemp.Length()-i+1]-48];
sRusult += Dw[i-1];
sRusult += AnsiString::StringOfChar(' ', SpaceNum);
}
return sRusult;
}
//-------------------------------------------------------------------------