package com.zy.crm.manager.utils; //数字中文大写工具类 public class ChineseNumberUtils { private static final String[] CN_NUMERIC = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; private static final String[] CN_CARRY = {"", "拾", "佰", "仟"}; private static final String[] CN_UNITS = {"", "万", "亿", "兆"}; private static final String CN_FULL = "整"; private static final String CN_NEGATIVE = "负"; public static String numberToChinese(double number) { if (number == 0) { return CN_NUMERIC[0]; } long temp = (long) (number * 100); int numFen = (int) (temp % 10); temp = temp / 10; int numJiao = (int) (temp % 10); temp = temp / 10; int[] parts = new int[20]; int numParts = 0; for (int i = 0; temp != 0; i++) { int partNum = (int) (temp % 10000); parts[i] = partNum; temp = temp / 10000; numParts++; } boolean lastIsZero = true; String chineseStr = ""; for (int i = 0; i < numParts; i++) { if (parts[i] == 0) { lastIsZero = true; if (i == numParts - 1) { chineseStr = CN_UNITS[i] + chineseStr; } continue; } if (lastIsZero) { chineseStr = CN_NUMERIC[0] + chineseStr; } String partChinese = partTranslate(parts[i]); partChinese += CN_UNITS[i]; chineseStr = partChinese + chineseStr; lastIsZero = false; } if (numFen == 0 && numJiao == 0) { chineseStr += CN_FULL; } else if (numFen == 0) { chineseStr += CN_NUMERIC[numJiao] + "角" + CN_FULL; } else { if (lastIsZero) { chineseStr += CN_NUMERIC[0]; } chineseStr += CN_NUMERIC[numJiao] + "角" + CN_NUMERIC[numFen] + "分"; } return chineseStr; } private static String partTranslate(int partNum) { if (partNum < 0 || partNum > 10000) { return ""; } String[] chNum = new String[4]; int unitPos = 0; boolean zero = true; while (partNum > 0) { int num = partNum % 10; if (num == 0) { if (!zero) { zero = true; chNum[unitPos++] = CN_NUMERIC[num]; } } else { zero = false; chNum[unitPos++] = CN_NUMERIC[num] + CN_CARRY[unitPos - 1]; } partNum = partNum / 10; } StringBuilder strBuf = new StringBuilder(); boolean hasValue = false; for (int i = 0; i < 4; i++) { if (chNum[i] != null) { if (i > 0 && !hasValue) { strBuf.insert(0, CN_NUMERIC[0]); } strBuf.insert(0, chNum[i]); hasValue = true; } } return strBuf.toString(); } public static void main(String[] args) { double number = 123456789.23; String chineseNumber = numberToChinese(number); System.out.println(chineseNumber); } }