如题,分享自用的阿拉伯数字金额转成中文大写,支持负数,单位元,小数支持2位数(角、分),网上摘录的,看到的比较靠谱的一个,
测试结果如下:
System.out.println(NumberToWords.convertToWords(-3.14)); // 负叁元壹角肆分
System.out.println(NumberToWords.convertToWords(10002)); // 壹万零贰元整
public class NumberToWords {
private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分";
private static final String DIGIT = "零壹贰叁肆伍陆柒捌玖";
private static final double MAX_VALUE = 9999999999999.99D;
//金额大写功能转换
public static String convertToWords(double v) {
String head = "";
if (v < 0) {
head = "负";
v = Math.abs(v);
}
if (v > MAX_VALUE) {
return "参数非法!";
}
long l = Math.round(v * 100);
if (l == 0) {
return "零元整";
}
String strValue = l + "";
// i用来控制数
int i = 0;
// j用来控制单位
int j = UNIT.length() - strValue.length();
String rs = "";
boolean isZero = false;
for (; i < strValue.length(); i++, j++) {
char ch = strValue.charAt(i);
if (ch == '0') {
isZero = true;
if (UNIT.charAt(j) == '亿' || UNIT.charAt(j) == '万' || UNIT.charAt(j) == '元') {
rs = rs + UNIT.charAt(j);
isZero = false;
}
} else {
if (isZero) {
rs = rs + "零";
isZero = false;
}
rs = rs + DIGIT.charAt(ch - '0') + UNIT.charAt(j);
}
}
if (!rs.endsWith("分")) {
rs = rs + "整";
}
rs = rs.replaceAll("亿万", "亿");
return head + rs;
}
}
Javascript的写法,详见:https://blog.terrynow.com/2021/09/24/javascript-money-number-to-chinese-capital/
文章评论