c语言 数字转换为大写钱币

例如输入1230.25 就输出壹仟贰佰叁拾元贰角伍分

第1个回答  2009-02-25
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

string ConvertMoneyCaps(long double moneySum)
{
long int temp_i = (long int)moneySum; /**//* 整数部分 */
float temp_f = moneySum - temp_i; /**//* 小数部分 */
int digit = 0, i, j, k, num_i;
string money("");
char num[20], *p;
char name[][3] = {"元","拾","佰","仟","万","亿"};
char numchar[][3] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
ltoa(temp_i, num, 10); /**//* 整数部分转换成字符串后在处理 */
p = num;
digit = strlen(num); /**//* 整数部分位数 */
/**//*--------处理整数部分 start--------*/
for(i = 1; i <= digit; i ++)
{
k = (digit - i) % 4;
if(isdigit(*p))
{
num_i = *p & 0xF; /**//* 把字符转换成数字,比如 '0'-> 0,'1' -> 1*/
/**//*--------转换数字开始---------*/
if(num_i)
{
money = money+ numchar[num_i];
}
else
{
if(k && (*(p + 1) &0xF))
money += "零";
}
/**//*--------转换数字结束-------*/
/**//*---------添加计数单位开始----*/
if(k)
{
if(num_i)
money = money + name[k];
}
else
{
j = digit - i;
if(j)
money = money + name[j/4 + 3];
else
money += "元";
}
/**//*--------添加计数单位结束--------*/
p++;
}
else
{
money = "遇到非数字退出!";
return money;
}
}
/**//*--------处理整数部分 End --------*/
/**//*--------处理小数部分 start--------*/
if(temp_f > 0.01)
{
if((int)(temp_f*10)) money = money + numchar[(int)(temp_f*10)] + "角";
if((int)(temp_f*100)%10) money = money + numchar[(int)(temp_f*100)%10] + "分";
}
/**//*--------处理小数部分 End--------*/
money += "整";

return money;
}
int main()
{
long double x = 33.20;
cout << "please input the money:";
cin >> x;
cout << "Convert Money Caps:";
string money = ConvertMoneyCaps(x);
cout << money <<endl;
return 0;
}本回答被网友采纳
第2个回答  2009-02-25
/*****************************************************************************
函 数 名:chgDbToCh
功能说明:将金额转换成大写
入口参数:
dData --原double型
出口参数:
pszDst --转换后的大写金额
返回信息:
引用变量:
******************************************************************************/
void chgDbToCh(double dData, char *pszDst)
{
int i = 0;
char szMon[12] = "\0";
char szTemp[64] = "\0";
char szStr[64] = "\0";

sprintf(szTemp, "%.2f", dData);
sprintf(szMon, "%11s", szTemp);
szMon[11] = '\0';

for(i=0; i<11; i++)
{
switch(szMon[i])
{
case '0':
break;

case '1':
/*if(((i!=4) && (i!=9)) && (szMon[i-1] == '0'))*/
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "壹");
break;

case '2':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "贰");
break;

case '3':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "叁");
break;

case '4':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "肆");
break;

case '5':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "伍");
break;

case '6':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "陆");
break;

case '7':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "柒");
break;

case '8':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "捌");
break;
case '9':
if(szMon[i-1] == '0')
strcat(szStr, "零");
strcat(szStr, "玖");
break;
default:
continue;
}

switch(i)
{
case 0:
strcat(szStr, "仟");
break;

case 1:
if(szMon[i] != '0')
strcat(szStr, "佰");
break;

case 2:
if(szMon[i] != '0')
strcat(szStr, "拾");
break;

case 3:
strcat(szStr, "万");
break;

case 4:
if(szMon[i] != '0')
strcat(szStr, "仟");
break;

case 5:
if(szMon[i] != '0')
strcat(szStr, "佰");
break;

case 6:
if(szMon[i] != '0')
strcat(szStr, "拾");
break;

case 7:
strcat(szStr, "元");
break;

case 9:
if(szMon[i] != '0')
strcat(szStr, "角");
break;

case 10:
if(szMon[i] != '0')
strcat(szStr, "分");
break;
}
}

if(szMon[10] == '0')
strcat(szStr, "整");

strcpy(pszDst, szStr);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网