求如何把一个int类型的数,比如int i =123456转化成十二万三千四百五十六?

解决方案 »

  1.   

    package com.tur.demo;import java.util.Stack;public class ChineseNumber {
        public static char[] numberTable = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};
        public static char[] unitTable = {' ', '万', '亿', '万'};
        public static boolean debug = false;    public static void main(String[] args) {
            debug = false;        System.out.println(chineseNumber(6001343463100001L));
            System.out.println(chineseNumber(6001040000346311L));
            System.out.println(chineseNumber(6001003463100031L));
            System.out.println(chineseNumber(69213434631L));
            System.out.println(chineseNumber(213434631));
            System.out.println(chineseNumber(201434631));
            System.out.println(chineseNumber(200000000));
            System.out.println(chineseNumber(201000100));
            System.out.println(chineseNumber(200000100));
            System.out.println(chineseNumber(3434631));
            System.out.println(chineseNumber(5032));
            System.out.println(chineseNumber(5002));
            System.out.println(chineseNumber(5000));
            System.out.println(chineseNumber(100));
            System.out.println(chineseNumber(102));
            System.out.println(chineseNumber(552));
            System.out.println(chineseNumber(50));
            System.out.println(chineseNumber(52));
            System.out.println(chineseNumber(5));
            System.out.println(chineseNumber(0));        System.out.println(chineseNumber(999990));
            System.out.println(chineseNumber(6001343463100009L));
            System.out.println(chineseNumber(6001003463100031L));
            System.out.println(chineseNumber(9999999999999999L));
            System.out.println(chineseNumber(9000000000101009L));
            System.out.println(chineseNumber(9000000000009888L));
            System.out.println(chineseNumber(-9000000000009888L));
        }    /**
         * [-9999万亿, 9999万亿]之间的整数的中文表示
         * @param n 是一个[-9999万亿, -9999万亿]之间的整数
         * @return 返回阿拉伯数字的中文表示
         */
        public static String chineseNumber(long n) {
            // 判断是否超出能表示的范围
            if (n < -9999999999999999L || n > 9999999999999999L) {
                throw new RuntimeException("Out of range [-9999999999999999L, 9999999999999999L] exception");
            }        if (n == 0) { return "零"; }        // 处理负数
            boolean negative = n < 0 ;
            n = n < 0 ? -n : n;        int unitIndex = 0;
            String result = "";
            Stack<String> stack = new Stack<String>();        do {
                // 从后向前,每4位数字转换一次,即[0, 9999]
                int t = (int) (n % 10000);
                n /= 10000;
                stack.push((t < 1000 ? "零" : "") + thousandToString(t) + unitTable[unitIndex++]);
            } while (n > 0);        while (!stack.isEmpty()) {
                result += stack.pop();
            }        trace("\n" + (negative ? "负" : "") + result);
            result = (negative ? "负" : "") + normalize(result);        return result;
        }    /**
         * [0, 9999]的整数的中文表示
         * @param thousand 是一个[0, 9999]的整数
         * @return 返回阿拉伯数字的中文表示
         */
        public static String thousandToString(int thousand) {
            if (thousand == 0) { return "零"; }
            String result = ""
                    + numberTable[thousand / 1000]       + "千"
                    + numberTable[thousand % 1000 / 100] + "百"
                    + numberTable[thousand % 100 / 10]   + "十"
                    + numberTable[thousand % 10];
            return normalize(result);
        }    /**
         * 把整数表示中不合适的部分过滤掉,
         *      例如: 零千零百零十二亿零千一百零十零万零千一百零十零
         *      应为: 二亿零一百万零一百
         * @param text 数字的中文表示
         * @return 返回正确的中文表示
         */
        public static String normalize(String text) {
            text = text.replaceAll("\\s+", "");
            text = text.replaceAll("(零十|零百|零千|零万)", "零");
            text = text.replaceAll("零+亿", "亿"); // 亿是最大的单位
            text = text.replaceAll("零+", "零");
            text = text.replaceAll("(^零|零$)", "");        return text;
        }    public static void trace(String text) {
            if (debug) {
                System.out.println(text);
            }
        }
    }输出:
    六千零一万三千四百三十四亿六千三百一十万零一
    六千零一万零四百亿零三十四万六千三百一十一
    六千零一万零三十四亿六千三百一十万零三十一
    六百九十二亿一千三百四十三万四千六百三十一
    二亿一千三百四十三万四千六百三十一
    二亿零一百四十三万四千六百三十一
    二亿
    二亿零一百万零一百
    二亿零一百
    三百四十三万四千六百三十一
    五千零三十二
    五千零二
    五千
    一百
    一百零二
    五百五十二
    五十
    五十二


    九十九万九千九百九十
    六千零一万三千四百三十四亿六千三百一十万零九
    六千零一万零三十四亿六千三百一十万零三十一
    九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九
    九千万亿零一十万一千零九
    九千万亿零九千八百八十八
    负九千万亿零九千八百八十八
      

  2.   

    http://blog.csdn.net/raistlic/article/details/8173850