`

算法:数字转换大写

 
阅读更多
import java.util.ArrayList;
import java.util.List;

public class Demo {

    private char ZERO = '0';

    private char ZERO_CN = '零';

    private String[] NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

    private String[] UNIT = { "", "拾", "佰", "仟" };

    private String[] MATRIX = { "", "万", "億", "兆", "吉", "太", "拍", "艾", "泽", "尧" };

    public String change(long num) {

        if (num < 0) {
            return "";
        }

        List<String> data = new ArrayList<String>();
        
        format(String.valueOf(num), data);
        
        return show(data);
    }

    public void format(String str, List<String> data) {

        int len = str.length();

        if (len == 1) {
            data.add(NUMBER[str.charAt(0) - ZERO]);
            return;
        }

        if (len > 4) {
            format(str.substring(str.length() - 4), data);
            format(str.substring(0, str.length() - 4), data);
            return;
        }

        formatUnit(str, data);
    }

    private void formatUnit(String str, List<String> data) {

        String result = "";

        while (str.length() > 0 && Long.parseLong(str) > 0) {

            if (str.charAt(0) == ZERO) {
                result += NUMBER[str.charAt(0) - ZERO];
                str = String.valueOf(Long.parseLong(str));
                continue;
            }

            result += NUMBER[str.charAt(0) - ZERO] + UNIT[str.length() - 1];

            str = str.substring(1);
        }

        data.add(result);
    }

    private String show(List<String> data) {

        String result = "";
        for (int i = data.size() - 1; i >= 0; i--) {
            String str = data.get(i);
            if (str.length() == 0) {
                continue;
            }
            result += data.get(i) + MATRIX[i];
        }

        return trimZeroCN(result);
    }

    private String trimZeroCN(String str) {

        if (str.length() <= 1) {
            return str;
        }

        char[] ch = str.toCharArray();

        int start = 0;
        int end = str.length() - 1;

        while (ch[start] == ZERO_CN) {
            start++;
        }

        while (ch[end] == ZERO_CN) {
            end--;
        }

        return str.substring(start, end + 1);
    }
}

 

9223372036854775807	==>	玖佰贰拾贰吉叁仟叁佰柒拾贰兆零叁佰陆拾捌億伍仟肆佰柒拾柒万伍仟捌佰零柒
100000009	==>	壹億零玖
103050709	==>	壹億零叁佰零伍万零柒佰零玖
123456789	==>	壹億贰仟叁佰肆拾伍万陆仟柒佰捌拾玖
103006	==>	壹拾万叁仟零陆
100006	==>	壹拾万零陆
123450	==>	壹拾贰万叁仟肆佰伍拾
123456	==>	壹拾贰万叁仟肆佰伍拾陆
10000	==>	壹万
10005	==>	壹万零伍
12000	==>	壹万贰仟
10045	==>	壹万零肆拾伍
12005	==>	壹万贰仟零伍
12300	==>	壹万贰仟叁佰
10345	==>	壹万零叁佰肆拾伍
12045	==>	壹万贰仟零肆拾伍
12305	==>	壹万贰仟叁佰零伍
12340	==>	壹万贰仟叁佰肆拾
12345	==>	壹万贰仟叁佰肆拾伍
1000	==>	壹仟
1004	==>	壹仟零肆
1034	==>	壹仟零叁拾肆
1204	==>	壹仟贰佰零肆
1230	==>	壹仟贰佰叁拾
1234	==>	壹仟贰佰叁拾肆
123	==>	壹佰贰拾叁
12	==>	壹拾贰
10	==>	壹拾
6	==>	陆
0	==>	零

 

分享到:
评论
1 楼 hesihua 2013-03-05  
 

相关推荐

    最简单算法:将数字转换为符合使用习惯的大写金额

    最简单算法:将数字转换为符合使用习惯的大写金额 编写语言:java 输出结果: 1200.00 壹仟贰佰元 1200.10 壹仟贰佰元壹角 1234.05 壹仟贰佰叁拾肆元零伍分 1200.05 壹仟贰佰元零伍分 1004.05 壹仟零肆元零伍分 ...

    数字转换为中文大写的4种算法

    在编程和信息技术领域,将阿拉伯数字转换...以上就是关于阿拉伯数字转换为中文大写数字的四种算法的详细解析,这些算法在实际开发中都有着广泛的应用。在编写代码时,可以根据实际情况进行优化和调整,以满足特定需求。

    数字大小写转换(转换为汉字大写)

    本文将深入探讨如何将数字转换为汉字大写,特别是在VC++环境下使用MFC库实现这一功能。首先,我们来理解标题“数字大小写转换(转换为汉字大写)”所指的知识点。 在会计、财务和其他需要精确表示金额的领域,数字...

    阿拉伯数字转换为中文大写

    7. 转换算法:我们使用了一个简单的转换算法将阿拉伯数字转换为中文大写数字,并加上相应的单位。 8. 编程实践:我们通过实践了解了如何使用Java语言将阿拉伯数字转换为中文大写数字,并掌握了编程的基本技术和方法...

    用C++编写数字转换成汉字大写的程序

    标题 "用C++编写数字转换成汉字大写的程序" 提示我们要探讨的是如何利用C++编程语言将阿拉伯数字转换为汉字大写,这种转换在银行、财务等对账单有明确要求的领域尤为常见。汉字大写数字通常用于增强财务记录的清晰度...

    易语言源码数字转换汉字大写.7z

    在标题"易语言源码数字转换汉字大写.7z"中,我们可以推断出这个压缩包包含的是使用易语言编写的源代码,其功能是将数字转换成汉字大写形式。这种转换在财务报表、会计领域以及一些需要清晰显示金额的场合非常常见,...

    数字转换大写

    因此,“数字转换大写”软件也内置了四舍五入的算法,确保金额转换的精确度。 “数字转换大写.exe”是这款软件的可执行文件,用户通过双击即可运行。由于它是一个独立的程序,无需安装即可运行,因此用户可以很方便...

    将数字转换为大写金额字符串源码(C#)

    以下是一个关于“将数字转换为大写金额字符串”的详细知识点: 1. **数字与汉字的对应关系**: 在转换过程中,数字0到9需要对应相应的汉字,如0对应“零”,1对应“壹”,以此类推。同时,还需要处理特殊的大写...

    数字转换为大写(JAVA)

    在Java编程中,将数字转换成大写是常见的需求,特别是在处理财务或会计相关的应用时。这个题目描述了一个简单的Java程序设计实验,其目的是将输入的浮点数值转换成中文金额的大写形式。以下是该实验涉及的主要知识点...

    数字转换为中文大写代码段

    标题 "数字转换为中文大写代码段" 描述了一个编程任务,即把数字转换成中文大写的表示形式。这个过程通常在财务或者会计领域中使用,例如在制作发票或者进行金融交易时,需要将数字金额以中文大写的形式展示,以避免...

    数字转换为大写

    标题"数字转换为大写"指的是编程中的一种功能,它能够接受小写形式的数字(例如,'1234.56')并将其转化为大写汉字(例如,“壹仟贰佰叁拾肆元伍角陆分”)。在描述中提到,只需要将要转换的数字作为参数传递给一个...

    阿拉伯数字转换成中文大写的算法(C#窗体程序)

    在本文中,我们将深入探讨如何使用C#编程语言创建一个窗体应用程序,该程序能够将输入的阿拉伯数字转换为中文大写。这个功能在财务报表、发票和其他需要以中文大写表示金额的场合非常有用。 首先,我们看到程序的...

    数字转换汉字大写.zip易语言项目例子源码下载

    本项目“数字转换汉字大写.zip”提供了一个易语言(EasyLanguage)的项目示例源码,用于帮助开发者理解和实现这一功能。 易语言是一种面向对象的、以中文编程为特色的编程语言,其目标是降低编程门槛,让更多人能够...

    数字转换成大写字母代码

    根据给定的信息,本文将对“数字转换成大写字母代码”的实现原理及代码细节进行深入解析,旨在帮助初学者理解这一有趣而实用的技术。 ### 一、代码功能概述 该程序的主要目的是将输入的浮点数转换为一系列特定的...

    数字转汉字大写

    在IT行业中,尤其是在财务软件开发或者数据处理领域,将阿拉伯数字转换为汉字大写是一种常见的需求,主要用于确保财务数据的准确性和防止篡改。标题"数字转汉字大写"所指的就是这一技术应用,它主要涉及到字符串处理...

    VC 数字转换为人民币金额大写的简单算法实现

    VC 数字转换为人民币金额大写的简单算法实现 随机输入一串数字,然后通过程序,将其输出对应的人民币金额的大写。例如,输入3568974.5,则输出“叁佰伍拾陆万捌仟玖佰柒拾肆元伍角”,如果输入158526574.25,则输出...

    数字 转 金额 最快算法

    在描述中提到的“数字转中文大写金额的程序,是我所知的最快算法”,这可能是指一个经过优化的算法,能够在短时间内处理大量的数字转换工作,提高处理效率,尤其对于大数据量的财务系统来说,这样的算法是非常有价值...

    vb 数字转换为英文字母

    在VB(Visual Basic)编程语言中,将数字转换为英文表达是一种常见的需求,尤其是在处理财务报表、发票或者需要用户友好的数字表示时。这个算法主要涉及到数字与英文单词的映射,以及处理不同数量级(个位、十位、...

    小写金额转大写金额(C++)

    本问题涉及的是一个具体的C++程序设计任务:将小写金额转换为大写的中文表示。这个功能在财务软件、银行系统或者会计应用中非常有用,因为它能够帮助确保金额的正确性和规范性。 在中文中,大写金额的表示法与小写...

    罗马数字直接转换成中文大写人民币数字

    本主题聚焦于一个特定的转换任务:将罗马数字转换为中文大写人民币数字。这个任务常见于财务软件或者自动化的会计系统中,因为在中国,大额金额通常使用中文大写来表示,以避免因数字笔画相似而引起的混淆和欺诈。 ...

Global site tag (gtag.js) - Google Analytics