关于阿拉伯数字金额转为英文大写金额? 两年前用VB 写过一个,方案不太好,: 将数字转化为STRING型,求他的长度,在着基础上按照我们记数的规则处理,但是要注意 对零的处理。主要是一个用递归函数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class EnglishDecimalFormat { private static final String[] majorNames = { "", " thousand", " million", " billion", " trillion", " quadrillion", " quintillion" }; private static final String[] tensNames = { "", " ten", " twenty", " thirty", " fourty", " fifty", " sixty", " seventy", " eighty", " ninety" }; private static final String[] numNames = { "", " one", " two", " three", " four", " five", " six", " seven", " eight", " nine", " ten", " eleven", " twelve", " thirteen", " fourteen", " fifteen", " sixteen", " seventeen", " eighteen", " nineteen" }; private String convertLessThanOneThousand(int number) { String soFar; if (number % 100 < 20){ soFar = numNames[number % 100]; number /= 100; } else { soFar = numNames[number % 10]; number /= 10; soFar = tensNames[number % 10] + soFar; number /= 10; } if (number == 0) return soFar; return numNames[number] + " hundred" + soFar;}public String convert(int number) { /* special case */ if (number == 0) { return "zero"; } String prefix = ""; if (number < 0) { number = -number; prefix = "negative"; } String soFar = ""; int place = 0; do { int n = number % 1000; if (n != 0){ String s = convertLessThanOneThousand(n); soFar = s + majorNames[place] + soFar; } place++; number /= 1000; } while (number > 0); return (prefix + soFar).trim();}public static void main(String[] args) { EnglishDecimalFormat f = new EnglishDecimalFormat(); System.out.println("*** " + f.convert(0)); System.out.println("*** " + f.convert(1)); System.out.println("*** " + f.convert(16)); System.out.println("*** " + f.convert(100)); System.out.println("*** " + f.convert(118)); System.out.println("*** " + f.convert(200)); System.out.println("*** " + f.convert(219)); System.out.println("*** " + f.convert(800)); System.out.println("*** " + f.convert(801)); System.out.println("*** " + f.convert(1316)); System.out.println("*** " + f.convert(1000000)); System.out.println("*** " + f.convert(2000000)); System.out.println("*** " + f.convert(3000200)); System.out.println("*** " + f.convert(700000)); System.out.println("*** " + f.convert(9000000)); System.out.println("*** " + f.convert(123456789)); System.out.println("*** " + f.convert(-45)); /* *** zero *** one *** sixteen *** one hundred *** one hundred eighteen *** two hundred *** two hundred nineteen *** eight hundred *** eight hundred one *** one thousand three hundred sixteen *** one million *** two million *** three million two hundred *** seven hundred thousand *** nine million *** one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine *** negative fourty five */ }} 强制类型转换异常 求两日期间隔的自然年,自然月,日然天 【急】 netbeans 6.1 中单击按钮关闭窗口问题 【问】java的堆中的对象空间放置什么东西 笔试四个线程问题 如何实现java在后台监听键盘 大家给个思路 java中怎样将date 转化为指定格式的字符串? 关于domino里JDK版本低的问题 求助:根据不同参数使用不同方法 如何设置让BufferedReader和PrintWriter对指定目录进行文本读写 请问大家都用什么作为java的编译器。来者有分。
private static final String[] majorNames = {
"",
" thousand",
" million",
" billion",
" trillion",
" quadrillion",
" quintillion"
}; private static final String[] tensNames = {
"",
" ten",
" twenty",
" thirty",
" fourty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
}; private static final String[] numNames = {
"",
" one",
" two",
" three",
" four",
" five",
" six",
" seven",
" eight",
" nine",
" ten",
" eleven",
" twelve",
" thirteen",
" fourteen",
" fifteen",
" sixteen",
" seventeen",
" eighteen",
" nineteen"
}; private String convertLessThanOneThousand(int number) {
String soFar; if (number % 100 < 20){
soFar = numNames[number % 100];
number /= 100;
}
else {
soFar = numNames[number % 10];
number /= 10; soFar = tensNames[number % 10] + soFar;
number /= 10;
}
if (number == 0) return soFar;
return numNames[number] + " hundred" + soFar;
}public String convert(int number) {
/* special case */
if (number == 0) { return "zero"; } String prefix = ""; if (number < 0) {
number = -number;
prefix = "negative";
} String soFar = "";
int place = 0; do {
int n = number % 1000;
if (n != 0){
String s = convertLessThanOneThousand(n);
soFar = s + majorNames[place] + soFar;
}
place++;
number /= 1000;
} while (number > 0); return (prefix + soFar).trim();
}public static void main(String[] args) {
EnglishDecimalFormat f = new EnglishDecimalFormat();
System.out.println("*** " + f.convert(0));
System.out.println("*** " + f.convert(1));
System.out.println("*** " + f.convert(16));
System.out.println("*** " + f.convert(100));
System.out.println("*** " + f.convert(118));
System.out.println("*** " + f.convert(200));
System.out.println("*** " + f.convert(219));
System.out.println("*** " + f.convert(800));
System.out.println("*** " + f.convert(801));
System.out.println("*** " + f.convert(1316));
System.out.println("*** " + f.convert(1000000));
System.out.println("*** " + f.convert(2000000));
System.out.println("*** " + f.convert(3000200));
System.out.println("*** " + f.convert(700000));
System.out.println("*** " + f.convert(9000000));
System.out.println("*** " + f.convert(123456789));
System.out.println("*** " + f.convert(-45));
/*
*** zero
*** one
*** sixteen
*** one hundred
*** one hundred eighteen
*** two hundred
*** two hundred nineteen
*** eight hundred
*** eight hundred one
*** one thousand three hundred sixteen
*** one million
*** two million
*** three million two hundred
*** seven hundred thousand
*** nine million
*** one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine
*** negative fourty five
*/
}
}