`

金额大小写转换的程序

阅读更多

package com.member.struts.util;

import java.math.BigDecimal;

public class AmountChange2RMB {  
    private static String bigLetter[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆",  
            "柒", "捌", "玖" };  
 
    private static String unit[] = { "元", "拾", "佰", "仟", "万", "拾", "佰", "仟",  
            "亿", "拾", "佰", "仟", "万" };  
 
    private static String unitSmall[] = { "分", "角" };  
 
    /** 
     *  
     * @param args 
     */ 
    public static void main(String[] args) {  
 
        String[] testStrs = { "1234567888888.100"/* 大十进制数 */,  
                "1001"/* 没有小数,且含相邻的两个零 */, "101005.1"/*零在单位所处的位置*/, "1010"/*零在元位*/ };  
        System.out.println(new BigDecimal(testStrs[2]).toString());  
        System.out.println(trans(testStrs[2]));  
    }  
 
    public static String trans(String str) {  
        BigDecimal dec = check2BigDecimal(str);  
        if (dec == null)  
            return null;  
 
        str = dec.toPlainString();  
        String[] sArr = str.split("\\.");  
        String intOnly = sArr[0];  
        String smallOnly = "";  
        if (sArr.length == 2)  
            smallOnly = sArr[1];  
 
        if (smallOnly.length() > 2) {  
            smallOnly = smallOnly.substring(0, 2);  
        }  
 
        return transInt(intOnly) + transSmall(smallOnly);  
    }  
 
    public static String transInt(String str) {  
        if ("0".equals(str))  
            return "";  
 
        StringBuffer newS = new StringBuffer();  
        char[] cArr = str.toCharArray();  
 
        for (int i = 0; i < cArr.length; i++) {  
            String u = unit[cArr.length - i - 1];  
            int position = "元万亿".indexOf(u);  
 
            // 遇到零,特殊处理  
            if (cArr[i] == '0') {  
                // 如果零在特殊位置上:比如个位,万位,亿位  
                if (position >= 0) {  
                    // 如果零在个位:需要加上单位“元”  
                    if (position == 0) {  
                        newS.append(unit[cArr.length - i - 1]);  
                        continue;  
                    } else {// 如果零不在个位  
                        // 零不在个位,且这个位后,紧跟着一个零:只需要加上单位  
                        if (i < cArr.length - 1 && cArr[i + 1] == '0') {  
                            newS.append(unit[cArr.length - i - 1]);  
                            continue;  
                        } else {// 零不在个位,且这个位后,没有紧跟着一个零:需要加上单位和大写数字(注意次序:单位在前,大写数字在后)  
                            newS.append(unit[cArr.length - i - 1]);  
                            newS.append(bigLetter[cArr[i] - 48]);  
                            continue;  
                        }  
                    }  
                } else {// 零不在特殊位置上  
                    // 零不在特殊位置上,且这个位后,紧跟着一个零:忽略这个零  
                    if (i < cArr.length - 1 && cArr[i + 1] == '0') {  
                        continue;  
                    }  
                    // 零不在特殊位置上,且这个位后,没有紧跟着一个零:需要加上大写数字  
                    newS.append(bigLetter[cArr[i] - 48]);  
                    continue;  
                }  
 
            }  
 
            // 不是零,常规处理  
            newS.append(bigLetter[cArr[i] - 48]);  
            newS.append(unit[cArr.length - i - 1]);  
 
        }  
 
        return newS.toString();  
    }  
 
    public static String transSmall(String str) {  
        //因为最多精确到分,所有str的长度最多位2  
          
        if (str == null || "".equals(str))  
            return "";  
 
        char[] cArr = str.toCharArray();  
        if (str.indexOf("0") == -1) {//不含有零,常规处理  
            StringBuffer newS = new StringBuffer();  
            for (int i = 0; i < cArr.length; i++) {  
                newS.append(bigLetter[cArr[i] - 48]);  
                newS.append(unitSmall[cArr.length - i - 1]);  
            }  
            return newS.toString();  
        } else {//含有零,分情况考虑  
            if (cArr[0] == '0' && cArr[cArr.length == 2 ? 1 : 0] == '0')//两个都为零  
                return "";  
            if (cArr[0] == '0' && cArr.length == 2 && cArr[1] != '0')//角位为零,分位不为零  
                return bigLetter[0] + bigLetter[cArr[1] - 48] + unitSmall[0];  
            if (cArr[0] != '0' && cArr.length == 2 && cArr[1] == '0')//分位为零,角位不为零  
                return bigLetter[cArr[0] - 48] + unitSmall[1];  
        }  
 
        return "";  
    }  
 
    public static BigDecimal check2BigDecimal(String str) {  
        try {  
            double f = Double.valueOf(str);// 0.0 0.1 -5 ""  
            if (f < 0)  
                System.out.println("输入数据小于0,请检查!");  
            return new BigDecimal(f);  
        } catch (NumberFormatException e) {  
            e.printStackTrace();  
        }  
 
        return null;  
    }  

分享到:
评论

相关推荐

    金额大小写转换程序

    在IT行业中,编程任务经常涉及到各种实用工具的开发,其中之一就是“金额大小写转换程序”。这类程序主要用于将数字金额转换成我们日常财务中常见的大写汉字形式,以满足会计、银行和其他金融业务的需求,确保金额的...

    c#经典金额大小写转换

    本文将基于提供的部分代码片段,详细解析如何用 C# 开发一个功能完整的金额大小写转换程序。 #### 代码分析与完善 ##### 类结构设计 根据提供的代码,可以看到定义了一个名为 `DealString` 的类,用于实现金额...

    金额大小写转换vc++

    对于提供的压缩包文件"金额大小写转换",很可能是包含了一个示例程序或者源代码。通过查看和学习这个示例,可以进一步理解上述步骤的具体实现,也可以参与到讨论中,提出改进意见或优化方案。 总之,金额大小写转换...

    vb数字、金额大小写转换源码

    这个“vb数字、金额大小写转换源码”提供了一种解决方案,帮助开发者将数字或者金额从阿拉伯数字形式转换为中文的大写形式,以满足中国财务规范的要求,比如在填写支票或财务报表时。 在中文中,数字的大小写转换有...

    C#大小写转换form程序

    提到的“C#实例:人民币大小写转换程序”可能是指将数字转换为中文大写的金额表示,这是财务软件或会计系统中常见的需求。这需要特定的算法,将数字映射到相应的中文字符,如“零”、“壹”、“贰”等,并考虑...

    delphi10以上真正能用的金额大小写转换源码

    标题提到的"delphi10以上真正能用的金额大小写转换源码"正是解决这个问题的一个解决方案,它确保了在Delphi 10及更高版本中的兼容性。 Delphi是一种基于Object Pascal的集成开发环境(IDE),广泛用于创建Windows、...

    money 金额大小写转换

    7. **DLL文件(ConvertServer.dll)**:这是一个动态链接库文件,通常用于封装特定的功能模块,比如金额转换的算法,供主程序(金额大小写转换.exe)调用。DLL文件可以减少应用程序的体积,提高运行效率。 8. **可...

    C#实例:人民币大小写转换程序

    在C#编程环境中,开发一个人民币大小写转换程序是一项实用的任务,这主要涉及到字符串处理、数字格式化以及中文字符的拼接。以下是一些相关的知识点: 1. **字符串操作**: - `ToString()` 方法:将数值转换为字符...

    金额大小写转换

    本文将详细介绍一个关于“金额大小写转换”的DLL(动态链接库)及其调用方法,旨在帮助开发者更高效地实现这一功能。 DLL是一种可执行文件,它包含了一系列可供其他程序调用的函数或资源。在这个特定的案例中,我们...

    winform C#人民币大小写金额转换程序

    本项目"winform C#人民币大小写金额转换程序"是一个实用工具,旨在帮助用户将输入的数字金额自动转换为规范的中文大写,这在财务报表、发票和合同中非常常见,因为中文大写可以避免因数字篡改而引发的争议。...

    人民币大小写转换

    Java中关于金额小写转换为大写的工具类

    字母大小写转换工具和人民币大小写转换工具

    因此,有了人民币大小写转换工具,输入数字后即可自动生成对应的汉字大写金额,极大地提高了工作效率和准确性。这种工具可能包含内置的数字到汉字映射,以及一些特定规则,比如零的表达(如“零”、“O”或“—”)...

    Delphi金额大小写转换

    "Delphi金额大小写转换"是一个针对这一需求的源码解决方案,它使得在Delphi编程环境中实现这个功能变得简单便捷。 Delphi是Borland公司推出的一种基于Object Pascal语言的集成开发环境(IDE),它以其高效的编译器...

    C#商品金额大小写转换

    在C#编程中,将商品金额的阿拉伯数字转换为汉字大写形式,是常见的金融或会计软件中的一个功能。这通常涉及到数字与汉字字符的映射关系,以及金额单位的正确添加。以下是一些关于这个主题的重要知识点: 1. **数字...

    大小写金额转换器

    "大小写金额转换器"是一个利用Delphi编写的实用小程序,主要功能是将阿拉伯数字格式的金额转换为汉字大写,这在财务、会计等领域中非常常见,因为汉字大写金额可以有效防止篡改,确保财务数据的准确性。 首先,我们...

    VB货币金额大小写转换源代码

    下面我们将详细探讨VB货币金额大小写转换的相关知识点。 1. **货币格式规范**:在财务系统中,数字通常需要按照特定的格式表示,比如人民币的格式要求,小数部分保留两位,千位分隔符(逗号),并且有明确的正负号...

    人民币转换程序 大小写转换

    人民币的大小写转换是财务和会计领域中的基本操作,因为在中国,正式的财务文件中通常要求金额用大写汉字表示,以防止篡改和增加准确性。这个“人民币转换程序”就是为了解决这样的问题而设计的。 程序的核心功能是...

    excel大小写转换程序

    根据提供的标题、描述、标签及部分内容,我们可以了解到这段代码是一个VBA函数,用于在Excel环境中进行数字到...此外,通过调整函数内的逻辑,还可以支持更多的扩展需求,如支持更大金额的转换、更复杂的金额格式等。

Global site tag (gtag.js) - Google Analytics