java数字转为人民币大写汉字输出
时间: 2023-09-28 09:13:29 浏览: 91
您好!要将Java数字转为人民币大写汉字输出,可以使用如下代码:
```java
import java.math.BigDecimal;
public class NumberToChinese {
// 数字对应的汉字
private static final String[] CN_NUM = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
// 数量级对应的汉字
private static final String[] CN_UNIT = {"", "拾", "佰", "仟", "万", "亿"};
// 小数点后面的汉字
private static final String CN_POINT = "点";
// 人民币大写汉字
private static final String CN_MONETARY_UNIT = "元";
/**
* 数字转为人民币大写汉字
* @param num 数字
* @return 人民币大写汉字
*/
public static String numberToChinese(BigDecimal num) {
if (num == null || num.compareTo(BigDecimal.ZERO) == 0) {
return "零元整";
}
// 处理整数部分
StringBuilder sb = new StringBuilder();
long integerPart = num.longValue(); // 获取整数部分
int unitIndex = 0; // 数量级索引
while (integerPart > 0) {
int digit = (int)(integerPart % 10); // 获取当前位的数字
if (digit > 0 || sb.length() > 0) { // 当前位为0且前面已经有数字,则在当前位添加“零”
sb.insert(0, CN_NUM[digit] + CN_UNIT[unitIndex]);
} else if (unitIndex == 4) { // 当前位为“万”时,如果前面没有数字,则在当前位添加“零”
sb.insert(0, CN_NUM[digit]);
}
integerPart /= 10;
unitIndex++;
}
sb.append(CN_MONETARY_UNIT); // 添加“元”
// 处理小数部分
int decimalPlaces = num.scale(); // 获取小数位数
if (decimalPlaces > 0) { // 如果有小数,则处理小数部分
sb.append(CN_POINT);
long decimalPart = num.movePointRight(decimalPlaces).longValue() % 100; // 获取小数部分
if (decimalPart > 0) { // 如果小数部分不为0
sb.append(CN_NUM[decimalPart / 10] + "角");
if (decimalPart % 10 > 0) {
sb.append(CN_NUM[decimalPart % 10] + "分");
}
} else { // 如果小数部分为0
sb.append("整");
}
} else { // 如果没有小数,则添加“整”
sb.append("整");
}
return sb.toString();
}
public static void main(String[] args) {
BigDecimal num = new BigDecimal("123456789.01");
System.out.println(numberToChinese(num)); // 壹亿贰仟叁佰肆十五万陆仟捌佰柒十元零壹分
}
}
```
注意:该代码仅适用于人民币,如果要将其他货币转为大写汉字,需要根据具体情况进行修改。
阅读全文