java实现人民币转换大写
·
人民币转换大写
public class CurrencyConverter {
public static String convertToChineseCurrency(String amount) {
if (amount == null || amount.isEmpty()) {
return "零元整";
}
double value = Double.parseDouble(amount);
if (value == 0) {
return "零元整";
}
String[] digitUnits = {"元", "拾", "佰", "仟", "万"};
String[] numerals = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
StringBuilder result = new StringBuilder();
int integerPart = (int) value;
int fractionalPart = (int) Math.round((value - integerPart) * 100);
// 处理整数部分
if (integerPart > 0) {
String integerStr = String.valueOf(integerPart);
int len = integerStr.length();
boolean lastWasZero = false; // 用于记录上一个数字是否为零
for (int i = 0; i < len; i++) {
int num = Character.getNumericValue(integerStr.charAt(i));
if (num != 0) {
if (lastWasZero) {
result.append("零"); // 添加“零”字
lastWasZero = false; // 重置状态
}
result.append(numerals[num]); // 添加数字
result.append(digitUnits[len - i - 1]); // 添加单位
} else {
lastWasZero = true; // 当前数字是零,设置状态
}
}
}
// 处理小数部分
if (fractionalPart > 0) {
int jiao = fractionalPart / 10; // 角
int fen = fractionalPart % 10; // 分
if (jiao != 0) {
result.append(numerals[jiao]).append("角"); // 角
}
if (fen != 0) {
result.append(numerals[fen]).append("分"); // 分
}
}
if (result.length() == 0) {
return "零元整";
}
if (fractionalPart == 0) {
result.append("整");
}
return result.toString();
}
}
使用:
@Override
public List<BillInfoVo> getBillInfoByNalNo(String nalNo) {
List<BillInfoVo> billInfoVoList = calBillInfoMapper.selectByNalNo(nalNo);
billInfoVoList.forEach(vo->{
vo.setTotalAmtInWords(CurrencyConverter.convertToChineseCurrency(String.valueOf(vo.getTotalAmount())));
vo.setElectricityTypeDescription(ElecSortEnum.getDescriptionByCode(vo.getElectricityType()));
});
return billInfoVoList;
}
最终输出:

更多推荐
所有评论(0)