如题,分享自用的阿拉伯数字金额转成中文大写,支持负数,单位元,小数支持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/
文章评论