`

人民币大小写转换工具类

阅读更多
package com.test.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public final class ChangeRMB {

    // 每个数字对应的大写
    private static final String[] num = { "零", "壹", "贰", "叁", "肆", "伍", "陆",
	    "柒", "捌", "玖", };

    // 从低到高排列的单位
    private static final String[] bit = { "圆", "拾", "佰", "仟", "万", "拾", "佰",
	    "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿" };

    // 金额里面的角和分
    private static final String[] jf = { "角", "分" };

    /**
     * 处理金额的整数部分,返回"...圆整"
     * 
     * @param integer
     * @return String
     * @throws Exception
     */
    public static String praseUpcaseRMB(String integer) throws Exception {
	StringBuilder sbdr = new StringBuilder("");
	int j = integer.length();
	if (j > bit.length) {
	    throw new Exception("\n只能处理亿万亿以内的数据(含亿万亿)!");
	}
	char[] rmb = integer.toCharArray();
	for (int i = 0; i < rmb.length; i++) {
	    int numLocate = Integer.parseInt("" + rmb[i]); // 大写数字位置
	    int bitLocate = j - 1 - i; // 数字单位的位置
	    /*
	     * 连续大写零只添加一个
	     */
	    if (numLocate == 0) {
		if (!sbdr.toString().endsWith(num[0])) {
		    sbdr.append(num[numLocate]);
		}
		continue;
	    }
	    /*
	     * 下面的if语句保证 10065004583.05-->壹佰亿陆仟伍佰万肆仟伍佰捌拾叁圆零伍分
	     */
	    if (bit[bitLocate].equals("仟")) {
		String s = sbdr.toString();
		if (!s.endsWith(bit[bitLocate + 1]) && s.length() > 0) {
		    if (s.endsWith(num[0])) {
			sbdr.deleteCharAt(sbdr.length() - 1);
		    }
		    sbdr.append(bit[bitLocate + 1]);
		}
	    }
	    sbdr.append(num[numLocate]);
	    sbdr.append(bit[bitLocate]);
	}// end for
	/*
	 * 去掉结尾"零"后,补全
	 */
	if (sbdr.toString().endsWith(num[0])) {
	    sbdr.deleteCharAt(sbdr.length() - 1);
	    sbdr.append("圆整");
	} else {
	    sbdr.append("整");
	}
	return sbdr.toString();
    }

    /**
     * 处理带小数的金额,整数部分交由上一个方法处理,小数部分自己处理
     * 
     * @param integer
     * @param decimal
     * @return String
     * @throws Exception
     */
    public static String praseUpcaseRMB(String integer, String decimal)
	    throws Exception {
	String ret = ChangeRMB.praseUpcaseRMB(integer);
	ret = ret.split("整")[0]; // 处理整数部分
	StringBuilder sbdr = new StringBuilder("");
	sbdr.append(ret);
	char[] rmbjf = decimal.toCharArray();
	for (int i = 0; i < rmbjf.length; i++) {
	    int locate = Integer.parseInt("" + rmbjf[i]);
	    if (locate == 0) {
		if (!sbdr.toString().endsWith(num[0])) {
		    sbdr.append(num[locate]);
		}
		continue;
	    }
	    sbdr.append(num[locate]);
	    sbdr.append(jf[i]);
	}
	return sbdr.toString();
    }

    /**
     * 将double形式的字符串(有两位小数或无小数)转换成人民币的大写格式
     * 
     * @param doubleStr
     * @return String
     * @throws Exception
     */
    public static String doChangeRMB(String doubleStr) throws Exception {
	String result = null;
	if (doubleStr.contains(".")) { // 金额带小数
	    int dotloc = doubleStr.indexOf(".");
	    int strlen = doubleStr.length();
	    String integer = doubleStr.substring(0, dotloc);
	    String decimal = doubleStr.substring(dotloc + 1, strlen);
	    result = ChangeRMB.praseUpcaseRMB(integer, decimal);
	} else { // 金额是整数
	    String integer = doubleStr;
	    result = ChangeRMB.praseUpcaseRMB(integer);
	}
	return result;
    }

    /**
     * 将double数值(有两位小数或无小数)转换成人民币的大写格式
     * 
     * @param rmbDouble
     * @return String
     * @throws Exception
     */
    public static String doChangeRMB(double rmbDouble) throws Exception {
	String result = null;
	double theInt = Math.rint(rmbDouble);
	if (theInt > rmbDouble) {
	    theInt -= 1;
	}
	double theDecimal = rmbDouble - theInt;
	String integer = new Long((long) theInt).toString();
	String decimal = "" + Math.round(theDecimal * 100);
	if (decimal.equals("0")) {
	    result = ChangeRMB.praseUpcaseRMB(integer);
	} else {
	    result = ChangeRMB.praseUpcaseRMB(integer, decimal);
	}
	return result;
    }

    public static void main(String[] args) throws Exception {
	System.out.print("输入小写人民币金额:");
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	String in = br.readLine();
	String result = ChangeRMB.doChangeRMB(in);
	System.out.println("\n" + "------------转换结果------------");
	System.out.println(result);
	double d = 54628569856.68;
	String ret = ChangeRMB.doChangeRMB(d);
	System.out.println("\n" + "------------转换结果------------");
	System.out.println(ret);
    }
}

 

分享到:
评论

相关推荐

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

    总之,字母大小写转换工具和人民币大小写转换工具在不同场景下都有着广泛的应用,它们简化了文本处理和财务管理的工作,提升了效率和准确性。对于IT专业人士来说,理解和掌握这些工具的使用是提高工作效率的重要一环...

    VB.NET编写的人民币大小写转换工具

    VB.NET编写的人民币大小写转换工具,实现小写转大写,大写转小写。

    jsp页面调用applet实现人民币的大小写转换.docx

    该实现方法通过在JSP页面中嵌入一个Applet,使用JavaScript与Applet进行交互,实现实时的人民币大小写转换。 一、JSP页面调用Applet的实现 在JSP页面中,使用 `;charset=gb2312" %&gt;` 指定页面的字符编码为GB2312,...

    vb 人民币大小写转换 代码

    在VB(Visual Basic)编程语言中,经常会有需求将数字转换为中文的人民币大写形式,以便于财务报告和会计处理。以下是一个VB程序的详细分析,它实现了将输入的数字(小写形式)转换为人民币大写的源代码。 首先,...

    人民币大小写转换

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

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

    在IT行业中,编程时常...总之,人民币大小写的转换是一个实用的编程任务,涉及到了字符串操作、数字格式化以及可能的用户交互设计。通过各种编程技术,我们可以创建出高效且准确的转换工具,满足财务领域的实际需求。

    人民币大小写工具.zip

    为了方便用户进行这种转换,出现了“人民币金额大小写转换工具”,如“人民币大小写工具.exe”。本文将详细介绍这个工具的用途、工作原理以及如何使用。 一、工具用途 人民币金额大小写转换工具的主要功能是将输入...

    人民币大小写转换类库

    在IT行业中,人民币大小写转换类库是一种非常实用的工具,尤其在财务软件或与金融相关的系统开发中。这类库通常包含一系列函数或方法,能够将数字金额转换为中文大写,符合中国财务法规的要求。以下是对这个主题的...

    人民币大小写转换 人民币大写转换工具 v1.0

    《人民币大小写转换工具详解与应用》 在日常的财务工作中,准确无误地处理人民币金额是至关重要的,尤其在填写支票、合同等正式文件时,必须使用规范的中文大写数字来表示金额,以避免欺诈和误解。为此,"人民币...

    金额大小写转换vc++

    首先,我们要了解金额大小写转换的基本规则。在中文环境下,金额通常分为整数部分和小数部分,每四位为一个“级”,从右向左分别为个、十、百、千,依次类推,直至万亿。对于小数部分,通常只保留到分,且没有特定的...

    实现人民币大小写转换功能

    通过以上步骤,我们可以创建一个功能完善的人民币大小写转换工具,帮助财务人员快速准确地完成工作。在开发过程中,除了技术实现,还需要考虑用户体验和安全性,确保转换的准确性和数据的安全性。

    C#winForm人民币大小写转换器

    本项目"人民币大小写转换器"是一个基于C# WinForm的实用工具,它能帮助用户将人民币数字金额转换成中文大写的规范表示,这对于财务报告和会计工作来说非常有用。 在C#中,WinForm提供了丰富的控件和事件处理机制,...

    java实现人民币大小写转换方法分享

    8. **最终结果**:整数部分的处理结果(prefix)和小数部分的处理结果(suffix)组合在一起,加上“整”字(代表无小数部分),就构成了完整的人民币大小写转换结果。 9. **代码注释**:代码中包含了丰富的注释,...

    rmb.rar_人民币_人民币大小写转换_账单

    在金融和会计领域,正确处理人民币的大小写转换是至关重要的,这涉及到账单的准确性和规范性。"rmb.rar"是一个压缩包文件,包含了名为"rmb.py"的Python脚本,这个脚本的目的显然是为了帮助用户将数字金额(如111.11...

    人民币大小写转换器➕光电器件搜索

    这里提到的"人民币大小写转换器"是一个软件工具,它能够帮助用户将数字金额转换成中文大写的表示形式,这是中国财务报表的标准格式。这种工具通常会考虑元、角、分的单位,并且确保精度,例如在这个描述中提到了...

    BAT批处理脚本-格式转换-人民币大小写互转程序.cmd.zip

    在财务工作中,正确地处理人民币金额的大小写转换是非常重要的,因为这涉及到资金的安全和准确性。传统的手动转换方式效率低且易出错,而通过编写批处理脚本则可以自动化这个过程,大大提高效率,减少人为错误。 该...

    文件名打小写一键转换工具解压即用

    在描述中提到了“字母大小写转换工具”以及“人民币大小写转换工具”。虽然这两者看似相关,但实际上涉及的是不同的应用领域。字母大小写转换通常指的是对文本字符串的操作,例如在编程中,可能需要将变量名、函数名...

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

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

Global site tag (gtag.js) - Google Analytics