任意一个正整数,请问怎么将其转换为数字?

解决方案 »

  1.   

    数字转汉字?第一次听说
    是不是unicode码?
      

  2.   

    是一二三四这样的汉字吗,java大概没有提供这样的功能,只有自己写一个mapping的函数了。
      

  3.   

    不知道,最多是通过数字找英文字母!
    java里面没有直接可以匹配汉字的功能!
      

  4.   

    分析一下:
    先看下面的数字对应关系
    1   2   3   4   5   6   7   8   9,翻译过来是
    一亿二千三百四十五万六千七百八十九
    仔细看一下,其中的 十百千万亿 是位数词,其中
    亿下面包含的最高数字单位是万
    万下面包含的最高数字单位是千
    千下面包含的最高数字单位是百
    百下面包含的最高数字单位是十
    十下面只有数字
    因此可以将数字按照最高的单位拆分成左右两部分,然后对每个部分求出它们的结果,最后加上位数词拼接起来。
    例如s = 123456789
    其最高的单位是“亿”,于是按照“亿”这一级进行拆分
    假设说映射函数为f,
    f(s)= f(1)+"亿"+f(23456789)
    对于23456789,最高的单位是“万”,于是按照“万”这一级进行拆分...
    最后的结果如下所示
                      f(123456789)=
      f(1)亿                          f(23456789) =
      f(1)亿             f(2345)万                           f(6789) =
      f(1)亿    f(2)千      +f(345)万             f(6)千              f(789) =
      f(1)亿    f(2)千  f(3)百   f(45)万          f(6)千        f(7)百    f(89) =
      f(1)亿    f(2)千  f(3)百   f(4)十 f(5)万    f(6)千        f(7)百    f(8)十 f(9)
    用这样的方法,理论上可以表达出任意大的正整数,例如如果汉字中没有“亿”这一级单位的话
    上面的方法得出的结果可以是 一万二千三百四十五万六千七百八十九。
    当然还有一些东西需要处理,例如
    1002应转换为 一千零二 而不是 一千零百零十二,
    12应转换为 十二 而不是 一十二...
      

  5.   

    yyfhz(火山) 说的没错,关键是特殊情况的处理。
      

  6.   

    看这里: 
    http://www.blogjava.net/rickhunter/articles/26849.html里面有这道题的答案: 
    将一个键盘输入的数字转化成中文输出
    (例如:输入:1234567     输出:一百二拾三万四千五百六拾七)
    用java语言实现,,请编一段程序实现!
      

  7.   

    特殊情况就是yyfhz(火山)最后三行说的。谢谢楼上的!
      

  8.   

    看看这个类,是我们用过的,基本还可以吧!import java.text.NumberFormat;
    import java.util.HashMap;
    import java.util.Locale;/**
     * 中文大写转换
     * 
     * 
     * 将数据按照国人习惯的大写方式表达
     */
    public class NumberChineseFormat {    /**
         * 进制单位名称
         */
        private static HashMap DAN_WEI;    /**
         * 中文数字表示
         */
        private static HashMap CHINESE_NUMBER;    /**
         * 每四位的单位名称(汉语特有的方式,英文为每三位)
         */
        private static HashMap FOUR_DAN_WEI;    /**
         * 零
         */
        private static String ZERO = "零";    static {
            DAN_WEI = new HashMap();
            DAN_WEI.put("-2", "分");
            DAN_WEI.put("-1", "角");
            DAN_WEI.put("1", "");
            DAN_WEI.put("2", "拾");
            DAN_WEI.put("3", "佰");
            DAN_WEI.put("4", "千");        CHINESE_NUMBER = new HashMap();
            CHINESE_NUMBER.put("0", "零");
            CHINESE_NUMBER.put("1", "壹");
            CHINESE_NUMBER.put("2", "贰");
            CHINESE_NUMBER.put("3", "叁");
            CHINESE_NUMBER.put("4", "肆");
            CHINESE_NUMBER.put("5", "伍");
            CHINESE_NUMBER.put("6", "陆");
            CHINESE_NUMBER.put("7", "柒");
            CHINESE_NUMBER.put("8", "捌");
            CHINESE_NUMBER.put("9", "玖");        FOUR_DAN_WEI = new HashMap();
            FOUR_DAN_WEI.put("0", "元");
            FOUR_DAN_WEI.put("1", "万");
            FOUR_DAN_WEI.put("2", "亿");
            FOUR_DAN_WEI.put("3", "兆");
        }    private double number;    private String currency;    private String integer;    private String fraction;    /**
         * 构造方法
         * 
         * @param number
         *            要转换的数据
         */
        public NumberChineseFormat(double number) {        NumberFormat nf;
            nf = NumberFormat.getCurrencyInstance(Locale.CHINA);        this.number = number;
            this.currency = nf.format(number);
            this.integer = "" + (long) number;
            this.fraction = currency.substring(currency.length() - 2);
        }    /**
         * 格式化
         * 
         * @return 中文大写
         */
        public String format() {        if (this.number == 0)
                return "零元";
            else
                return this.formatInteger() + this.formatFraction();
        }    /**
         * 转为中文大写 为转换整数和分数部分提供服务
         * 
         * @param str
         *            要转换的数据
         * @return 中文大写
         */
        private String toChinese(String str) {        String cn = "";        while (str.length() > 0) {            if (str.charAt(0) != '0') {
                    cn += (String) CHINESE_NUMBER
                            .get(String.valueOf(str.charAt(0)));
                    cn += (String) DAN_WEI.get(String.valueOf(str.length()));
                } else {
                    cn += (String) CHINESE_NUMBER.get("0");
                }
                str = str.substring(1);
            }        while (cn.indexOf(ZERO + ZERO) >= 0)
                cn = cn.replaceAll(ZERO + ZERO, ZERO);        if (cn.endsWith(ZERO))
                cn = cn.substring(0, cn.length() - 1);        return cn;
        }    /**
         * 转换整数部分
         * 
         * @return 整数部分的中文大写
         */
        private String formatInteger() {
            String cn = "";
            String str;
            String[] strArry;
            int c;        strArry = new String[integer.length() / 4 + 1];        int j = 0;
            while (integer.length() >= 4) {            str = integer.substring(integer.length() - 4);            System.out.println("$" + this.integer + "$");            integer = integer.substring(0, integer.length() - 4);            strArry[j] = str;            j++;
            }        if (!integer.equals("")) {
                strArry[strArry.length - 1] = integer;
                c = strArry.length;
            } else {
                c = strArry.length - 1;
            }        for (int i = c - 1; i >= 0; i--) {
                cn += this.toChinese(strArry[i]);
                cn += (String) FOUR_DAN_WEI.get("" + i);
            }        if (this.integer.equals(""))
                this.integer = "-1";        if (Integer.parseInt(this.integer) != 0)
                return cn;
            else
                return "";
        }    /**
         * 转换分数部分
         * 
         * @return 分数部分的中文大写
         */
        private String formatFraction() {        String cn = "";        if (this.fraction.equals(""))
                this.fraction = "-1";        if (this.integer.equals(""))
                this.integer = "-1";        if (Integer.parseInt(this.fraction) == 0) {
                return "整";
            }        if (this.fraction.charAt(0) != '0') {
                cn += (String) CHINESE_NUMBER.get(String
                        .valueOf(fraction.charAt(0)));            cn += (String) DAN_WEI.get("-1");
            } else {            if (Integer.parseInt(this.integer) != 0)
                    cn += ZERO;
            }        if (this.fraction.charAt(1) != '0') {
                cn += (String) CHINESE_NUMBER.get(String
                        .valueOf(fraction.charAt(1)));            cn += (String) DAN_WEI.get("-2");
            }        return cn;
        }
    }
      

  9.   

    谢谢p_p_y(心若虚尘)!你发帖的时候我已经给完分了,实在不好意思!