我想把数字转换成单词-到1缺少crore平均值高达1000000000000,如果我传递一个像这样的数字,函数应该在word中返回thin=s数字
我已经知道的代码高达900000000,但我想这里的限制是我写的代码…有没有人能让这个代码能够将1000000000000转换成word
public class NumberToWord
{
private static final String[] specialNames = {
"",
" thousand",
" million",
" billion",
" trillion",
" quadrillion",
" quintillion"
};
private static final String[] tensNames = {
"",
" ten",
" twenty",
" thirty",
" forty",
" 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 current;
if (number % 100 < 20){
current = numNames[number % 100];
number /= 100;
}
else {
current = numNames[number % 10];
number /= 10;
current = tensNames[number % 10] + current;
number /= 10;
}
if (number == 0) return current;
return numNames[number] + " hundred" + current;
}
public String convert(int number) {
if (number == 0) { return "zero"; }
String prefix = "";
if (number < 0) {
number = -number;
prefix = "negative";
}
String current = "";
int place = 0;
do {
int n = number % 1000;
if (n != 0){
String s = convertLessThanOneThousand(n);
current = s + specialNames[place] + current;
}
place++;
number /= 1000;
} while (number > 0);
return (prefix + current).trim();
}
public static void main(String[] args) {
NumberToWord obj = new NumberToWord();
System.out.println("*** " + obj.convert(123456789));
System.out.println("*** " + obj.convert(-55));
}
}发布于 2016-11-28 22:45:42
您可以使用long作为数据类型。
private String convertLessThanOneThousand(long number) {
String current;
if (number % 100 < 20){
current = numNames[(int) (number % 100)];
number /= 100;
}
else {
current = numNames[(int) (number % 10)];
number /= 10;
current = tensNames[(int) (number % 10)] + current;
number /= 10;
}
if (number == 0) return current;
return numNames[(int) number] + " hundred" + current;
}
public String convert(long number) {
if (number == 0) { return "zero"; }
String prefix = "";
if (number < 0) {
number = -number;
prefix = "negative";
}
String current = "";
int place = 0;
do {
long n = number % 1000;
if (n != 0){
String s = convertLessThanOneThousand(n);
current = s + specialNames[place] + current;
}
place++;
number /= 1000;
} while (number > 0);
return (prefix + current).trim();
}
public static void main(String[] args) {
NumberToWord obj = new NumberToWord();
System.out.println("*** " + obj.convert(123456789));
System.out.println("*** " + obj.convert(-55));
System.out.println("*** " + obj.convert(1000000000000L));
}输出:
*** one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine
*** negative fifty five
*** one trillion注意1000000000000末尾的L,以防您的编辑器抛出integer too long错误。
发布于 2016-11-28 23:29:52
你可以考虑使用ICU4J,而不是自己做所有的事情。ICU4J是一个提供Unicode和全球化支持的库。
ICU为几种语言环境提供了数字拼写规则。下面是一个英语的例子:
import com.ibm.icu.text.NumberFormat;
import com.ibm.icu.text.RuleBasedNumberFormat;
import com.ibm.icu.util.ULocale;
public class NewClass4 {
public static void main(String[] args){
ULocale locale = new ULocale("En");
String input = "1000000000000";
Long d = Long.parseLong(input);
NumberFormat formatter = new RuleBasedNumberFormat(locale, RuleBasedNumberFormat.SPELLOUT);
String result = formatter.format(d);
System.out.println(result);
}
}输出:one trillion
您还可以将其用于双精度值。为
Double d = Double.parseDouble("123.45");输出:one hundred twenty-three point four five
https://stackoverflow.com/questions/40846520
复制相似问题