java 将数字转换为人名币大写
时间: 2024-06-08 15:09:27 浏览: 175
以下是Java代码将数字转换为人民币大写的方法:
```java
import java.text.DecimalFormat;
public class RMBConverter {
private static final String[] CN_NUM = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
private static final String[] CN_UNIT = {"", "拾", "佰", "仟"};
private static final String[] CN_SECTION = {"", "万", "亿", "万亿"};
public static String convert(double num) {
if (num == 0) {
return "零元整";
}
long integer = (long) num; // 整数部分
StringBuilder sb = new StringBuilder();
int sectionIndex = 0; // 记录当前处理的是第几个节权位
while (integer > 0) {
int section = (int) (integer % 10000); // 取最后四位
sb.insert(0, CN_SECTION[sectionIndex]); // 插入节权位
sb.insert(0, sectionToChinese(section)); // 插入节内数字
integer /= 10000; // 去掉已经处理的最后四位
sectionIndex++; // 移动到下一个节权位
}
if (num < 0) {
sb.insert(0, "负");
}
DecimalFormat decimalFormat = new DecimalFormat("#.00");
String decimal = decimalFormat.format(num - (long) num); // 小数部分
if (decimal.equals("0.00")) {
sb.append("整");
} else {
sb.append(decimal.substring(2)).append("分");
sb.insert(0, decimalToChinese(decimal.substring(0, 2)) + "角");
}
return sb.toString();
}
private static String sectionToChinese(int section) {
StringBuilder sb = new StringBuilder();
if (section == 0) {
return CN_NUM[0];
}
int unitIndex = 0; // 记录当前处理的是第几位
boolean zero = true; // 记录当前位是否为零
while (section > 0) {
int digit = section % 10; // 取最后一位
if (digit == 0) {
if (!zero) {
sb.insert(0, CN_NUM[0]); // 插入零
zero = true;
}
} else {
sb.insert(0, CN_UNIT[unitIndex]); // 插入单位
sb.insert(0, CN_NUM[digit]); // 插入数字
zero = false;
}
section /= 10; // 去掉已经处理的最后一位
unitIndex++; // 移动到下一位
}
return sb.toString();
}
private static String decimalToChinese(String decimal) {
StringBuilder sb = new StringBuilder();
if (decimal.equals("00")) {
return "";
}
int digit1 = decimal.charAt(0) - '0';
int digit2 = decimal.charAt(1) - '0';
if (digit1 > 0) {
sb.append(CN_NUM[digit1]).append("拾");
} else if (digit2 > 0) {
sb.append("零");
}
if (digit2 > 0) {
sb.append(CN_NUM[digit2]);
}
return sb.toString();
}
}
```
使用方法如下:
```java
double num = 123456789.12;
String rmb = RMBConverter.convert(num);
System.out.println(rmb); // 壹亿贰仟叁佰肆拾伍万陆仟柒百捌十玖元壹角贰分
```
阅读全文