早教吧作业答案频道 -->其他-->
java如何将数字转换为英文比如将123转换为onethousandtwohundredthirtyfour
题目详情
java如何将数字转换为英文
比如将123转换为one thousand two hundred thirty four
比如将123转换为one thousand two hundred thirty four
▼优质解答
答案和解析
Java 数字转成英文
英文数词,按3位3位区分
Hundred: 100
Thousand:1,000
Million: 1,000,000
Billion: 1,000,000,000
Trillion: 1,000,000,000,000
Quintillion: 1,000,000,000,000,000,000
Sextillion: 1,000,000,000,000,000,000,000
Nonillion: 1,000,000,000,000,000,000,000,000,000,000
Centillion: 1 followed by 303 zeros
所以把数字字符串按3位分割,分别解析
public class NumUtil {
public static final String[] enNum = { // 基本数词表
"zero", "one", "tow", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "", "", "", "", "", "", "", "", "", "thirty", "", "", "",
"", "", "", "", "", "", "fourty", "", "", "", "", "", "", "", "",
"", "fifty", "", "", "", "", "", "", "", "", "", "sixty", "", "",
"", "", "", "", "", "", "", "seventy", "", "", "", "", "", "", "",
"", "", "eighty", "", "", "", "", "", "", "", "", "", "ninety" };
public static final String[] enUnit = { "hundred", "thousand", "million",
"billion", "trillion", "quintillion" }; // 单位表
public static void main(String[] args) {
System.out.println(analyze(1)); // 测试数据
System.out.println(analyze(21));
System.out.println(analyze(105));
System.out.println(analyze(3250));
System.out.println(analyze(47826));
System.out.println(analyze(56945781));
}
public static String analyze(long num) { // long型参数,
return analyze(String.valueOf(num)); // 因为long型有极限,所以以字符串参数方法为主
}
public static String analyze(String num) { // 数字字符串参数
// 判断字符串是否为数字
if (!num.matches("\\d+")) {
return String.format("%s is not number", num);
}
num = num.replaceAll("^[0]*([1-9]*)", "$1"); // 把字符串前面的0去掉
if (num.length() == 0) { // 如果长度为0,则原串都是0
return enNum[0];
} else if (num.length() > 9) { // 如果大于9,即大于999999999,题目限制条件
return "too big";
}
// 按3位分割分组
int count = (num.length() % 3 == 0) ? num.length() / 3
: num.length() / 3 + 1;
if (count > enUnit.length) {
return "too big";
} // 判断组单位是否超过,
// 可以根据需求适当追加enUnit
String[] group = new String[count];
for (int i = num.length(), j = group.length - 1; i > 0; i -= 3) {
group[j--] = num.substring(Math.max(i - 3, 0), i);
}
StringBuilder buf = new StringBuilder(); // 结果保存
for (int i = 0; i < count; i++) { // 遍历分割的组
int v = Integer.valueOf(group[i]);
if (v >= 100) { // 因为按3位分割,所以这里不会有超过999的数
buf.append(enNum[v / 100]).append(" ").append(enUnit[0])
.append(" ");
v = v % 100; // 获取百位,并得到百位以后的数
if (v != 0) {
buf.append("and ");
} // 如果百位后的数不为0,则追加and
}
if (v != 0) { // 前提是v不为0才作解析
if (v < 20 || v % 10 == 0) { // 如果小于20或10的整数倍,直接取基本数词表的单词
buf.append(enNum[v]).append(" ");
} else { // 否则取10位数词,再取个位数词
buf.append(enNum[v - v % 10]).append(" ");
buf.append(enNum[v % 10]).append(" ");
}
if (i != count - 1) { // 百位以上的组追加相应的单位
buf.append(enUnit[count - 1 - i]).append(" ");
}
}
}
return buf.toString().trim(); // 返回值
}
}
英文数词,按3位3位区分
Hundred: 100
Thousand:1,000
Million: 1,000,000
Billion: 1,000,000,000
Trillion: 1,000,000,000,000
Quintillion: 1,000,000,000,000,000,000
Sextillion: 1,000,000,000,000,000,000,000
Nonillion: 1,000,000,000,000,000,000,000,000,000,000
Centillion: 1 followed by 303 zeros
所以把数字字符串按3位分割,分别解析
public class NumUtil {
public static final String[] enNum = { // 基本数词表
"zero", "one", "tow", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "nineteen",
"twenty", "", "", "", "", "", "", "", "", "", "thirty", "", "", "",
"", "", "", "", "", "", "fourty", "", "", "", "", "", "", "", "",
"", "fifty", "", "", "", "", "", "", "", "", "", "sixty", "", "",
"", "", "", "", "", "", "", "seventy", "", "", "", "", "", "", "",
"", "", "eighty", "", "", "", "", "", "", "", "", "", "ninety" };
public static final String[] enUnit = { "hundred", "thousand", "million",
"billion", "trillion", "quintillion" }; // 单位表
public static void main(String[] args) {
System.out.println(analyze(1)); // 测试数据
System.out.println(analyze(21));
System.out.println(analyze(105));
System.out.println(analyze(3250));
System.out.println(analyze(47826));
System.out.println(analyze(56945781));
}
public static String analyze(long num) { // long型参数,
return analyze(String.valueOf(num)); // 因为long型有极限,所以以字符串参数方法为主
}
public static String analyze(String num) { // 数字字符串参数
// 判断字符串是否为数字
if (!num.matches("\\d+")) {
return String.format("%s is not number", num);
}
num = num.replaceAll("^[0]*([1-9]*)", "$1"); // 把字符串前面的0去掉
if (num.length() == 0) { // 如果长度为0,则原串都是0
return enNum[0];
} else if (num.length() > 9) { // 如果大于9,即大于999999999,题目限制条件
return "too big";
}
// 按3位分割分组
int count = (num.length() % 3 == 0) ? num.length() / 3
: num.length() / 3 + 1;
if (count > enUnit.length) {
return "too big";
} // 判断组单位是否超过,
// 可以根据需求适当追加enUnit
String[] group = new String[count];
for (int i = num.length(), j = group.length - 1; i > 0; i -= 3) {
group[j--] = num.substring(Math.max(i - 3, 0), i);
}
StringBuilder buf = new StringBuilder(); // 结果保存
for (int i = 0; i < count; i++) { // 遍历分割的组
int v = Integer.valueOf(group[i]);
if (v >= 100) { // 因为按3位分割,所以这里不会有超过999的数
buf.append(enNum[v / 100]).append(" ").append(enUnit[0])
.append(" ");
v = v % 100; // 获取百位,并得到百位以后的数
if (v != 0) {
buf.append("and ");
} // 如果百位后的数不为0,则追加and
}
if (v != 0) { // 前提是v不为0才作解析
if (v < 20 || v % 10 == 0) { // 如果小于20或10的整数倍,直接取基本数词表的单词
buf.append(enNum[v]).append(" ");
} else { // 否则取10位数词,再取个位数词
buf.append(enNum[v - v % 10]).append(" ");
buf.append(enNum[v % 10]).append(" ");
}
if (i != count - 1) { // 百位以上的组追加相应的单位
buf.append(enUnit[count - 1 - i]).append(" ");
}
}
}
return buf.toString().trim(); // 返回值
}
}
看了 java如何将数字转换为英文...的网友还看了以下:
与逆波兰式“abc*+-d*ef- -”对应的中缀表达式是(27)。A.-(a*b+c-d*e-f) 2020-05-26 …
··一道简单的数学题,先到的.对的.角D=90度,BD=CD,BO是角DBC的角平分线,CE垂直B 2020-06-03 …
已知A、B、C、D、E、F、G、H、L、K分别代表0至9中的不同数字,且有下列4个等式成立;D-E 2020-06-12 …
设一数列a,b,c,d,e,f,通过栈结构不可能不可能排成的顺序数列为()A)c,b,e,f,d, 2020-06-28 …
把正方形ABCD沿对角线AC折成直二面角B-AC-D,E、F分别为AD、BC的中点,O为正方形的中 2020-08-02 …
如图,在△ABC中,AB=AC,以AB为直径的⊙O分别交AC,BC于点D,E点F在AC的延长线上,且 2020-11-03 …
该地质演化过程的正确排序是()A.d-e-g-f-b-a-h-cB.d-g-e-a-c-h-b-fC 2020-11-04 …
绕弯的题,我被绕晕了,求函数有七组数据,ABCDEFG,已知A,B,C,七组数据的关系D+E=B,F 2020-11-11 …
(2012•菏泽二模)如图,EOF和E′O′F′为空间一匀强磁场的边界,其中EO∥E′O′,FO∥F 2020-11-13 …
已知d+g+e=21,d+g+f=20,e+g+f=22,d+e+g+f=29,如何解出g的值? 2020-12-26 …