package com.letv.watchball.ui;
import java.util.HashMap;
public class LetvNumberFormat {
private static java.util.Map<String, String> SmallToBigMap = new HashMap<String, String>();
static {
SmallToBigMap.put(String.valueOf(0), "零");
SmallToBigMap.put(String.valueOf(1), "一");
SmallToBigMap.put(String.valueOf(2), "二");
SmallToBigMap.put(String.valueOf(3), "三");
SmallToBigMap.put(String.valueOf(4), "四");
SmallToBigMap.put(String.valueOf(5), "五");
SmallToBigMap.put(String.valueOf(6), "六");
SmallToBigMap.put(String.valueOf(7), "七");
SmallToBigMap.put(String.valueOf(8), "八");
SmallToBigMap.put(String.valueOf(9), "九");
SmallToBigMap.put(String.valueOf(10), "十");
SmallToBigMap.put(String.valueOf(100), "百");
SmallToBigMap.put(String.valueOf(1000), "千");
SmallToBigMap.put(String.valueOf(10000), "万");
SmallToBigMap.put(String.valueOf(100000000), "亿");
}
public static String format(String num) {
// 先将末尾的零去掉
String numString = String.valueOf(num).replaceAll(".[0]+$", "");
// 分别获取整数部分和小数部分的数字
String intValue;
String decValue = "";
if (numString.indexOf(".") != -1) {
intValue = numString.substring(0, numString.indexOf(".") - 1);
decValue = numString.substring(numString.indexOf(".") + 1);
} else {
intValue = String.valueOf(num);
}
// 翻译整数部分。
intValue = formatInteger(Integer.parseInt(String.valueOf(intValue)));
// 翻译小数部分
decValue = formatDecnum(decValue);
String resultString = intValue;
if (!decValue.equals(""))
resultString = resultString + "点" + decValue;
return resultString;
}
/**
* 将阿拉伯整数数字翻译为汉语小写数字。 其核心思想是按照中文的读法,从后往前每四个数字为一组。每一组最后要加上对应的单位,分别为万、亿等。
* 每一组中从后往前每个数字后面加上对应的单位,分别为个十百千。 每一组中如果出现零千、零百、零十的情况下去掉单位。
* 每组中若出现多个连续的零,则通读为一个零。 若每一组中若零位于开始或结尾的位置,则不读。
*
* @param num
* @return
*/
public static String formatInteger(int num) {
int unit = 10000;
int numTmp = num;
int perUnit = 10000;
String sb = new String();
String unitHeadString = "";
while (num > 0) {
int temp = num % perUnit;
sb = formatIntegerLess10000(temp) + sb;
// 判断是否以单位表示为字符串首位,如果是,则去掉,替换为零
if (!unitHeadString.equals(""))
sb = sb.replaceAll("^" + unitHeadString, "零");
num = num / perUnit;
if (num > 0) {
// 如果大于当前单位,则追加对应的单位
unitHeadString = SmallToBigMap.get(String.valueOf(unit));
sb = unitHeadString + sb;
}
unit = unit * perUnit;
}
if (numTmp < 20 && numTmp >= 10) {
return sb.substring(1);
}
return sb;
}
/**
* 将小于一万的整数转换为中文汉语小写
*
* @param num
* @return
*/
public static String formatIntegerLess10000(int num) {
StringBuffer sb = new StringBuffer();
for (int unit = 1000; unit > 0; unit = unit / 10) {
int _num = num / unit;
// 追加数字翻译
sb.append(SmallToBigMap.get(String.valueOf(_num)));
if (unit > 1 && _num > 0)
sb.append(SmallToBigMap.get(String.valueOf(unit)));
num = num % unit;
}
// System.out.println(sb.toString().replaceAll("[零]+",
// "零").replaceAll("^零", "").replaceAll("零$", ""));
// 先将连续的零联合为一个零,再去掉头部和末尾的零
return sb.toString().replaceAll("[零]+", "零").replaceAll("^零", "")
.replaceAll("零$", "");
}
public static String formatDecnum(String num) {
StringBuffer sBuffer = new StringBuffer();
char[] chars = num.toCharArray();
for (int i = 0; i < num.length(); i++) {
sBuffer.append(SmallToBigMap.get(String.valueOf(chars[i])));
}
return sBuffer.toString();
}
//
// public static void main(String[] args) {
// // NumberFormat.formatInteger(1000);
// System.out.println(NumberFormat.format(123+""));
// System.out.println(NumberFormat.format("101"));
// System.out.println(NumberFormat.format("1001"));
// System.out.println(NumberFormat.format("10100"));
// System.out.println(NumberFormat.format("1000000001.123"));
// }
}