package com.ext;
import java.util.HashMap;
import java.util.Map;
public class Convert {
public final String[] units = new String[] { "", "thousand", "million",
"billion" ,"trillion"};
public final static Map<Integer, String> map = new HashMap<Integer, String>();
static {
// map.put(0,"zero");
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
map.put(5, "five");
map.put(6, "six");
map.put(7, "seven");
map.put(8, "eight");
map.put(9, "nine");
map.put(10, "ten");
map.put(11, "eleven");
map.put(12, "twelve");
map.put(13, "thirteen");
map.put(14, "fourteen");
map.put(15, "fifteen");
map.put(16, "sixteen");
map.put(17, "seventeen");
map.put(18, "eighteen");
map.put(19, "nineteen");
map.put(20, "twenty");
map.put(30, "thirty");
map.put(40, "forty");
map.put(50, "fifty");
map.put(60, "sixty");
map.put(70, "seventy");
map.put(80, "eighty");
map.put(90, "ninety");
}
public String convert(String number) {
if(null== number || "".equals(number)|| "0".equals(number)) {
return "";
}
number = number.replace(",", "");
int pointPos = number.indexOf(".");
String num1 = null;
String num2 = null;
if (-1 == pointPos) {
num1 = number;
} else {
num1 = number.substring(0, pointPos);
num2 = number.substring(pointPos + 1);
}
int c = (num1.length() + 2) / 3;
int offset = c * 3 - num1.length();
int offset_wk = offset;
while (offset_wk != 0) {
num1 = "*" + num1;
offset_wk--;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < c; i++) {
String s;
if (i == c - 1 && offset != 0) {
s = num1.substring(offset, 3);
} else {
s = num1.substring((c - i - 1) * 3, (c - i) * 3);
}
sb.insert(0, units[i] + " ").insert(0,
covertLessThanThousand(s) + " ");
}
if(!"".equals(sb.toString().trim())){
sb.append("dollar ");
}
if (null != num2 && Integer.parseInt(num2) != 0) {
sb.append(covertLessThanThousand(num2)).append(" cent");
}
return sb.toString();
}
public String covertLessThanThousand(String number) {
StringBuffer sb = new StringBuffer();
int iNum = Integer.parseInt(number);
if (iNum / 100 != 0) {
sb.append(map.get(iNum / 100)).append(" ").append("hundred").append(" ");
iNum = iNum % 100;
}
if (iNum / 10 != 0 && iNum > 19) {
sb.append(map.get(iNum - iNum % 10)).append(" ");
iNum = iNum % 10;
}
sb.append(map.get(iNum) == null ? "" : map.get(iNum)).append(" ");
return sb.toString().trim();
}
public static void main(String[] args) {
// String str = new Convert().convert("55,555,123,456,789.01");
// String str = new Convert().convert("1.01");
String str = new Convert().convert("99,999,999,999,999.99");
System.out.println(str.replaceAll("^[ ]*", ""));
}
}