记得上次换工作时去某BOSS厂商面试时,有这样一道题(RT),当时只是简单的说说想法,今天有时间,把具体的细节实现了,如下:
/**
* Description: 把输入的阿拉巴数字转换成大写中文输出
* 细节实现:
* 1、阿拉伯数字到大写中文数字的对应转换
* 2、单位转换,9位以上统一单位是亿,5-8位统一单位是万
* 3、用求商运算判断整数位数据及单位
* 4、用求模运算,获得该数去整后的余数,如果余数位数与求余前长度相差大于1,输出描述中按照中文习惯加零
* 5、把输出描述中后边的零全部干掉
* @Version1.0 2011-12-19 下午02:16:54 mustang created
* @param value
*/
public static void changNum2Chinese(long value) {
Map<String, String> danwei = new HashMap<String, String>();
danwei.put("1", "");
danwei.put("2", "拾");
danwei.put("3", "佰");
danwei.put("4", "仟");
danwei.put("5", "万");
danwei.put("6", "十");
danwei.put("7", "百");
danwei.put("8", "千");
danwei.put("9", "亿");
Map<String, String> daxie = new HashMap<String, String>();
daxie.put("0", "");
daxie.put("1", "壹");
daxie.put("2", "贰");
daxie.put("3", "叁");
daxie.put("4", "肆");
daxie.put("5", "伍");
daxie.put("6", "陆");
daxie.put("7", "柒");
daxie.put("8", "捌");
daxie.put("9", "玖");
String str = "";
long shang = 0;
long yushu = value;
long length = (yushu + "").length();
while (length > 0) {
shang = yushu / (long) Math.pow(10, length - 1);
yushu = yushu % (long) Math.pow(10, length - 1);
str += daxie.get(shang + "") + danwei.get(length + "");
long nlength = (yushu + "").length();
if (length > 9 && nlength < 9) {
str += "亿";
}
if (length > 5 && nlength < 5) {
str += "万";
}
if (length - nlength > 1) {
str += "零";
}
if (length == 1) {
length = 0;
} else {
length = (yushu + "").length();
}
}
while (str.endsWith("零")) {
str = str.substring(0, str.length() - 1);
}
System.out.println(str);
}