`

一个将10亿以内的阿拉伯数字转成汉字大写形式通用类

 
阅读更多
package com
/**
* 将10亿以内的阿拉伯数字转成汉字大写形式
* @author
*
*/

public class CnUpperCaser {
public static String[] chineseDigits = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};

    /**
     * 把金额转换为汉字表示的数量,小数点后四舍五入保留两位
     * @param amount
     * @return
     */
    public static String amountToChinese(double amount) {

        if(amount > 99999999999999.99 || amount < -99999999999999.99)
            throw new IllegalArgumentException("参数值超出允许范围 (-99999999999999.99 ~ 99999999999999.99)!");

        boolean negative = false;
        if(amount < 0) {
            negative = true;
            amount = amount * (-1);
        }

        long temp = Math.round(amount * 100);
        int numFen = (int)(temp % 10); // 分
        temp = temp / 10;
        int numJiao = (int)(temp % 10); //角
        temp = temp / 10;
        //temp 目前是金额的整数部分

        int[] parts = new int[20]; // 其中的元素是把原来金额整数部分分割为值在 0~9999 之间的数的各个部分
        int numParts = 0; // 记录把原来金额整数部分分割为了几个部分(每部分都在 0~9999 之间)
        for(int i=0; ; i++) {
            if(temp ==0)
                break;
            int part = (int)(temp % 10000);
            parts[i] = part;
            numParts ++;
            temp = temp / 10000;
        }

        boolean beforeWanIsZero = true; // 标志“万”下面一级是不是 0

        String chineseStr = "";
        for(int i=0; i<numParts; i++) {

            String partChinese = partTranslate(parts[i]);
            if(i % 2 == 0) {
                if("".equals(partChinese))
                    beforeWanIsZero = true;
                else
                    beforeWanIsZero = false;
            }

            if(i != 0) {
                if(i % 2 == 0)
                    chineseStr = "亿" + chineseStr;
                else {
                    if("".equals(partChinese) && !beforeWanIsZero)   // 如果“万”对应的 part 为 0,而“万”下面一级不为 0,则不加“万”,而加“零”
                        chineseStr = "零" + chineseStr;
                    else {
                        if(parts[i-1] < 1000 && parts[i-1] > 0) // 如果"万"的部分不为 0, 而"万"前面的部分小于 1000 大于 0, 则万后面应该跟“零”
                            chineseStr = "零" + chineseStr;
                        chineseStr = "万" + chineseStr;
                    }
                }
            }
            chineseStr = partChinese + chineseStr;
        }

        if("".equals(chineseStr)) // 整数部分为 0, 则表达为"零元"
            chineseStr = chineseDigits[0];
        else if(negative) // 整数部分不为 0, 并且原金额为负数
            chineseStr = "负" + chineseStr;

        chineseStr = chineseStr + "元";

        if(numFen == 0 && numJiao == 0) {
            chineseStr = chineseStr + "整";
        }
        else if(numFen == 0) { // 0 分,角数不为 0
            chineseStr = chineseStr + chineseDigits[numJiao] + "角";
        }
        else { // “分”数不为 0
            if(numJiao == 0)
                chineseStr = chineseStr + "零" + chineseDigits[numFen] + "分";
            else
                chineseStr = chineseStr + chineseDigits[numJiao] + "角" + chineseDigits[numFen] + "分";
        }

        return chineseStr;

    }


    /**
     * 把一个 0~9999 之间的整数转换为汉字的字符串,如果是 0 则返回 ""
     * @param amountPart
     * @return
     */
    private static String partTranslate(int amountPart) {

        if(amountPart < 0 || amountPart > 10000) {
            throw new IllegalArgumentException("参数必须是大于等于 0,小于 10000 的整数!");
        }


        String[] units = new String[] {"", "拾", "佰", "仟"};

        int temp = amountPart;

        String amountStr = new Integer(amountPart).toString();
        int amountStrLength = amountStr.length();
        boolean lastIsZero = true; //在从低位往高位循环时,记录上一位数字是不是 0
        String chineseStr = "";

        for(int i=0; i<amountStrLength; i++) {
            if(temp == 0) // 高位已无数据
                break;
            int digit = temp % 10;
            if(digit == 0) { // 取到的数字为 0
                if(!lastIsZero) //前一个数字不是 0,则在当前汉字串前加“零”字;
                    chineseStr = "零" + chineseStr;
                lastIsZero = true;
            }
            else { // 取到的数字不是 0
                chineseStr = chineseDigits[digit] + units[i] + chineseStr;
                lastIsZero = false;
            }
            temp = temp / 10;
        }
        return chineseStr;
    }


    public static void main(String[] args) {

        if(args.length == 0) {
            System.out.println("转换演示:");
            System.out.println("-------------------------");
            System.out.println("25000000000005.999: " + amountToChinese(25000000000005.999));
            System.out.println("45689263.626: " + amountToChinese(45689263.626));
            System.out.println("0.69457: " + amountToChinese(0.69457));
            System.out.println("250.0: " + amountToChinese(250.0));
            System.out.println("0: " + amountToChinese(0));
            System.out.println("-------------------------");
        
        }
        else {
            System.out.println("转换结果:");
            System.out.println(args[0] + ": " + amountToChinese(Double.parseDouble(args[0])));
        }

    }



}
分享到:
评论

相关推荐

    js 把阿拉伯数字转成中文大写

    前台页面,通过js转化成中文大写,阿拉伯数字转成中文大写

    16位以内阿拉伯数字转中文大写VB源代码

    16位以内阿拉伯数字转中文大写VB源代码 自己写的代码,欢迎提意见,多多交流

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

    在main方法中,我们创建了一个Text对象,并调用了mons方法,传入了一个阿拉伯数字字符串"23401203040",然后将其转换为中文大写数字。 阿拉伯数字转换为中文大写的知识点: 1. 字符串处理:在这个示例代码中,我们...

    阿拉伯数字转换成英文大写

    阿拉伯数字转换成英文大写是 Excel 中的一种实用功能,它可以将阿拉伯数字转换成英文大写形式。在 Excel 中,我们可以使用 Visual Basic 编辑器来实现这个功能。 在 Excel 中,我们首先需要启动 Visual Basic 编辑...

    python程序设计 将阿拉伯数字转换为大写数字

    将阿拉伯数字转换为大写数字,主要解决小数点问题,

    excel中将阿拉伯数字转换成中文大写数字的函数方式.docx

    这个 VBA 代码定义了一个名为 NumberString 的函数,该函数将阿拉伯数字 x 转换成中文大写数字,format 参数指定了要使用的中文大写数字格式,type 参数指定了要返回的数字类型。然后,我们可以在 Excel 表格中使用...

    将阿拉伯数字转换为汉字数字或者汉字大写金额

    1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...

    mysql 函数,可以将数字转换为中文大写形式

    mysql 函数,可以将数字转换为中文大写形式。大写数字是中国特有的数字书写方式,利用与数字同音的汉字取代数字,以防止数目被涂改。 据考证,大写数字最早是由武则天发明,后经朱元璋改进完善。

    js(非金额)把阿拉伯数字转成中文大写

    这部分代码定义了一个名为`var_change`的对象,其中包含了几个方法用于处理字符串反转、构建中文大写映射表以及最终实现数字转换的逻辑。 **核心方法解析**: - **`strrev` 方法**:反转字符串。 - **`pri_ary` ...

    人民币数字转换成汉字大写

    人民币数字转换成汉字大写 android Java 运行效率

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

    总的来说,这个C#窗体程序提供了一个方便的工具,可以将用户输入的阿拉伯数字自动转换成中文大写形式。这种功能对于处理涉及金额的事务时,能够提高数据录入的准确性和一致性,尤其在中文环境下显得尤为重要。开发者...

    中文数字转成阿拉伯数字 java 实现

    这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元测试类。下面我们将深入探讨这个功能的实现及其相关知识点。 首先,我们要理解中文数字和阿拉伯...

    sql server阿拉伯数字转大写中文存储过程

    SQL Server 是一个功能强大且广泛应用的关系数据库管理系统,而阿拉伯数字转大写中文是一个常见的需求,例如,在财务报表、发票printing等应用场景中,需要将阿拉伯数字转换为大写中文以满足特定的格式要求。本文将...

    汉语大写数字转换成阿拉伯数字

    汉语大写数字转换成阿拉伯数字。支持如下转换 '一千二百二十一万九千三百五十七亿一千二百二十一万九千零五十七', '一千二百二十一', '一千零十', '一万零一百', '一千零十一', '一万零一百十一', '一千二百...

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

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

    金额阿拉伯数字转换中文大写(全)

    综上所述,"金额阿拉伯数字转换中文大写"是一个实用的工具,尤其在财务工作中具有重要意义。通过编程实现这一功能,需要注意转换逻辑的精确性,同时提供用户友好的界面和稳定可靠的性能。在实际应用中,这样的工具...

    阿拉伯数字转大写汉字

    在中文环境中,将阿拉伯数字转换为大写汉字是一项非常实用的功能,尤其是在财务、银行系统等需要将金额以大写形式显示的场合。例如,当需要在支票或发票上填写金额时,通常会使用大写汉字来表示具体的数值,以此防止...

    阿拉伯数字转换成英文和大写

    这个项目描述了一个程序,能够处理Excel表格中的数据,将阿拉伯数字自动转换为英文和大写形式,并且保留小数点后两位,以满足财务精度的要求。 首先,我们需要了解阿拉伯数字和英文数字的对应关系。阿拉伯数字包括0...

    阿拉伯数字转大写

    为了实现阿拉伯数字到汉字大写的转换,首先需要定义一个基础的数字与汉字大写的映射表。在给定的代码示例中,通过`var NUMS = new Array("", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");` 和 `var HEX ...

    易语言数字转换汉字大写

    在编程领域,尤其是在中文编程环境中,有时我们需要将阿拉伯数字转换为汉字大写,这在财务、会计等领域的报表和凭证中尤为常见。易语言作为一款中国本土开发的、以中文编程为特色的编程语言,提供了方便的方式来实现...

Global site tag (gtag.js) - Google Analytics