首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图(数字)转word java代码

图(数字)转word java代码
EN

Stack Overflow用户
提问于 2016-11-28 22:20:23
回答 2查看 233关注 0票数 0

我想把数字转换成单词-到1缺少crore平均值高达1000000000000,如果我传递一个像这样的数字,函数应该在word中返回thin=s数字

我已经知道的代码高达900000000,但我想这里的限制是我写的代码…有没有人能让这个代码能够将1000000000000转换成word

代码语言:javascript
复制
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));
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-11-28 22:45:42

您可以使用long作为数据类型。

代码语言:javascript
复制
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));
}

输出:

代码语言:javascript
复制
*** one hundred twenty three million four hundred fifty six thousand seven hundred eighty nine
*** negative fifty five
*** one trillion

注意1000000000000末尾的L,以防您的编辑器抛出integer too long错误。

票数 0
EN

Stack Overflow用户

发布于 2016-11-28 23:29:52

你可以考虑使用ICU4J,而不是自己做所有的事情。ICU4J是一个提供Unicode和全球化支持的库。

ICU为几种语言环境提供了数字拼写规则。下面是一个英语的例子:

代码语言:javascript
复制
 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

您还可以将其用于双精度值。为

代码语言:javascript
复制
Double d = Double.parseDouble("123.45");

输出:one hundred twenty-three point four five

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40846520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档