计算机二级人民币数字格式,C++实现人民币阿拉伯数字转成中文大写

该代码实现将数值金额转换为汉字大写形式的功能,适用于财务场景中金额的规范书写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

extern "C" __declspec(dllexport)

unsigned char __stdcall Money2ChineseCapital2(const double Num,

const unsigned char BufferLength,

char *Buffer

)

{

char szChMoney[33*4+1],*szNum;

int iLen,iLen2, iNum, iAddZero=0;

char buff[33];

char *buf=buff;

sprintf( buf,"%0.0f",(double)(__int64)(Num*100.0+0.5*(Num<0.0?(-1):1)));

iLen=strlen(buf);

szNum=szChMoney;

if(Num<0.0)

{

*(szNum++)=OtherWords[1][0];

*(szNum++)=OtherWords[1][1];

buf++;

iLen--;

}

for(int i=1;i<=iLen;i++)

{

iNum=buf[i-1]-48;

iLen2=iLen-i;

if(iNum==0)

{

if((iLen2-2)%4==0&&(iLen2-3)>0&&((iLen2>=8)||iAddZero<3))

{

*(szNum++)=hzUnit[(iLen2-3)%8][0];

*(szNum++)=hzUnit[(iLen2-3)%8][1];

}

iAddZero++;

if(iLen>1&&iLen2==1)

{

*(szNum++)=hzNum[0][0];

*(szNum++)=hzNum[0][1];

}

}

else

{

if((iAddZero&&iLen2>=2)&&((iLen2-1)%4!=0)||(iAddZero>=4&&(iLen2-1)>0))

{

*(szNum++)=hzNum[0][0];

*(szNum++)=hzNum[0][1];

}

*(szNum++)=hzNum[iNum][0];

*(szNum++)=hzNum[iNum][1];

iAddZero=0;

}

if((iAddZero<1)||(iLen2==2))

{

if(iLen-i>=3)

{

*(szNum++)=hzUnit[(iLen2-3)%8][0];

*(szNum++)=hzUnit[(iLen2-3)%8][1];

}

else

{

*(szNum++)=mnUnit[(iLen2)%3][0];

*(szNum++)=mnUnit[(iLen2)%3][1];

}

}

}

int Result=szNum-szChMoney;

if(Result+(Num<0.0?(-2):0)==0)

{

*(szNum++)=hzNum[0][0];

*(szNum++)=hzNum[0][1];

*(szNum++)=mnUnit[0];

*(szNum++)=mnUnit[1];

*(szNum++)=OtherWords[0][0];

*szNum=OtherWords[0][1];

Result+=6;

}

else

if(buf[iLen+(Num<0.0?1:0)-1]==‘0‘)

{

*(szNum++)=OtherWords[0][0];

*szNum=OtherWords[0][1];

Result+=2;

}

if(BufferLength)

{

if(BufferLength>0)

Result=(Result>BufferLength)?BufferLength:Result;

memcpy(Buffer,szChMoney,Result);

}

return Result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值