人民币转大写c++包括小数
时间: 2023-11-28 12:06:11 浏览: 32
以下是将人民币金额转换成大写的C++代码,包括小数:
```c++
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
string digit[10] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
string unit1[5] = {"", "拾", "佰", "仟"};
string unit2[3] = {"", "万", "亿"};
string int2str(int n) {
string str;
while (n > 0) {
int d = n % 10;
str = digit[d] + str;
n /= 10;
}
return str;
}
string getInteger(string str) {
string result;
int len = str.length();
int i = 0, j = len - 1;
while (i < len) {
int k = j - i + 1;
if (str[i] == '0') {
i++;
continue;
}
result += digit[str[i] - '0'] + unit1[k - 1];
i++;
}
return result;
}
string decimal2str(int num) {
if (num == 0) return "";
string str;
str += digit[num] + "角";
return str;
}
string getDecimal(string str) {
string result;
int len = str.length();
if (len == 1) {
result += decimal2str(str[0] - '0');
} else if (len == 2) {
int num = (str[0] - '0') * 10 + (str[1] - '0');
result += decimal2str(num);
}
return result;
}
string toChinese(string str) {
string result;
int len = str.length();
int i = 0;
while (i < len) {
int k = (len - i - 1) / 4;
int j = min(i + 4, len) - 1;
string s = str.substr(i, j - i + 1);
string t = getInteger(s);
if (t != "") {
result += t + unit2[k];
} else if (k == 0 || result[result.length() - 1] != '零') {
result += "零";
}
i = j + 1;
}
return result;
}
int main() {
double num;
cout << "请输入金额(最多两位小数):";
cin >> num;
int integer_part = (int)num;
int decimal_part = round((num - integer_part) * 100);
string str1 = int2str(integer_part);
string str2 = getDecimal(to_string(decimal_part));
string result;
if (str1 != "") {
result += toChinese(str1) + "元";
}
if (str2 != "") {
result += str2;
} else if (result == "") {
result += "零元整";
} else {
result += "整";
}
cout << "大写金额为:" << result << endl;
return 0;
}
```
使用示例:
```
请输入金额(最多两位小数):12345.67
大写金额为:壹万贰仟叁佰肆拾伍元陆角柒分
```