C++:将参数传入的一个浮点数值转换为中文金额的大写格式,转换结果作为字符串返回
编写函数,将参数传入的一个浮点数值转换为中文金额的大写格式,转换结果作为
字符串返回。
●当金额为整数时,只表示整数部分,省略小数部分,并添加"整"字。
●当金额中含有连续的0时,只需要一个"零"即可。
●注意10的表示,例如110: 壹佰壹拾元整,10: 壹拾元整。
#include<iostream>
#include<string>
#include <cstdlib>
#include <sstream>
using namespace std;
string trans(double);
int main()
{
double num;
cout<<"请输入一个需要转换为中文金额的浮点数(精确到小数点后两位):";
cin>>num;
string str=trans(num);
cout<<num<<"转换为中文金额为:"<<str;
}
string trans(double num)
{
string unit[] = {"分","角","元","拾","佰","仟","万"};//单位
string counts[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
string news;
num=num*100.0;
int a = num;//将数字转化为字符串
stringstream ss;
ss << a;
string str = ss.str();
size_t len=str.size();
for(size_t i=0;i<len;i++)
{
if(str[i] - '0'==0)//出现多个零时只保留一个零
{
if(str[i-1]- '0'==0)
continue;
else
news = news + counts[str[i] - '0'] ;
}
else
news = news + counts[str[i] - '0'] + unit[len - i - 1];//不出现零时正常表示
}
string::size_type position1,position2;
position1=news.find("角");
position2=news.find("分");
if(position1==news.npos&&position2==news.npos)//角和分同时不存在时表示为整
{
news.append("整");
}
if(news.find("零整")!=-1)
news.replace(news.find("零整"),3,"整");//排除零整出现在一起的情况
return news;
}