`

使用java将人民币金额转换成大写并使用自定义标签显示到页面

    博客分类:
  • Java
阅读更多

1、定义一个class用来将人民币金额转换成大写,我这里叫ChangeNumMoney.java:

package com.test;

public class ChangeNumMoney {
	/*
	public static void main(String[] args) {
		String money = changeNumMoneyToChinese("123456.1234");
		System.out.println(money);
	}
	*/
	public static String changeNumMoneyToChinese(String money) {
		String[] cnNums = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; // 汉字的数字
		String[] cnIntRadice = { "", "拾", "佰", "仟" }; // 基本单位
		String[] cnIntUnits = { "", "万", "亿", "兆" }; // 对应整数部分扩展单位
		String[] cnDecUnits = { "角", "分", "毫", "厘" }; // 对应小数部分单位
		String cnInteger = "整"; // 整数金额时后面跟的字符
		String cnIntLast = "元"; // 整型完以后的单位
		double maxNum = 999999999999999.9999; // 最大处理的数字
		String IntegerNum; // 金额整数部分
		String DecimalNum; // 金额小数部分
		String ChineseStr = ""; // 输出的中文金额字符串
		String[] parts = null; // 分离金额后用的数组,预定义

		// 1、是否为null
		if (money == null) {
			return "空字符串";
		}

		// 2、是否为空字符串
		money = money.trim();// 去除空格
		if (money.length() == 0) {
			return "空字符串";
		}

		//3、是否为钱的格式
		String s="[^0][\\d]{1,15}[.]{0,1}[\\d]{0,4}";//大于0且整数部分不为0的
		String s2="[0][.][\\d]{0,4}";//小于0的数
		if(!(money.matches(s) || money.matches(s2))){//两个都不符合
			return "格式错误,格式为:整数(最多15位)+.+小数(最多4位)";
		}
		// 4、是否为0
		double money2 = Double.valueOf(money);
		if (money2 == 0) {
			ChineseStr = cnNums[0] + cnIntLast + cnInteger;
			return ChineseStr;
		}
		//5、是否超出最大处理数字
		if (money2>= maxNum) {
			return "超出最大处理数字";
		}
		// 6、判断是否有小数点,确定小数部分和整数部分
		if (money.indexOf(".") == -1) {// 没有小数点
			IntegerNum = money;// 若没有小数部分,那么当前钱数就是整数部分,小数部分为空
			DecimalNum = "";
		} else {
			parts = money.split("\\.");// 进行截取
			IntegerNum = parts[0];// 整数部分
			DecimalNum = parts[1];//小数部分,
		}
		
		//7、整型部分
		if (Integer.parseInt(IntegerNum, 10) > 0) { // 获取整型部分转换
			int zeroCount = 0;
			char[] array = IntegerNum.toCharArray();
			String n="";
			int p=0,q=0,m=0;
			for (int i = 0; i < IntegerNum.length(); i++) {
				n = Character.toString(array[i]);
				p = IntegerNum.length() - i - 1;
				q = p / 4;
				m = p % 4;
				if (n.equals("0")) {
					zeroCount++;
				} else {
					if (zeroCount > 0) {
						ChineseStr += cnNums[0];
					}
					zeroCount = 0; // 归零
//					System.out.println(n+"\n"+cnNums[Integer.parseInt(n)]+"\n"+m+"\ncnIntRadice[m]");
					ChineseStr += cnNums[Integer.parseInt(n)] + cnIntRadice[m];
				}
				if (m == 0 && zeroCount < 4) {
					ChineseStr += cnIntUnits[q];
				}
			}
			ChineseStr += cnIntLast;
		}
		
		//8、整理小数部分
		if (DecimalNum.trim().length() > 0) { // 小数部分
			String n="";
			char[] array = DecimalNum.toCharArray();
			for (int i = 0; i < DecimalNum.length(); i++) {
				n = Character.toString(array[i]);
				if (!n.equals("0")) {
					ChineseStr += cnNums[Integer.parseInt(n)] + cnDecUnits[i];
				}
			}
		}
		
		//9、判断是否有整理结果,若没有则返回“零元整”
		if (ChineseStr.trim().length() == 0) {
			ChineseStr += cnNums[0] + cnIntLast + cnInteger;
		} else if (DecimalNum.trim().length() == 0) {
			ChineseStr += cnInteger;
		}
		return ChineseStr;
	}
	
	 /** 
	 * 判断str1中包含str2的个数 
	 *@param str1 
	 * @param str2 
	 * @return counter 
	 */  
	public static int countStr(String str1, String str2) { 
		int counter=0;
	    if (str1.indexOf(str2) == -1) {  
	        return 0;
	    } 
	    while(str1.indexOf(str2)!=-1){
	    	counter++;
	    	str1=str1.substring(str1.indexOf(str2)+str2.length());
	    }
	    return counter;  
	}  
}

2、在WebRoot/WEB-INF下新建一个tld文件,我这里叫money.tld,内容为:

<?xml version="1.0" encoding="UTF-8"?>     
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"    
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
     	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    
        version="2.0"> 
       <tlib-version>1.0</tlib-version> 
       <short-name>ChangeNumMoney</short-name>
       <function>
       		<description>将数字格式的钱转换成大写人民币</description><!-- 对这个EL方法进行描述 -->
		<name>changeNumMoneyToChinese</name><!-- 调用El方法的名字 -->
		<function-class>com.test.ChangeNumMoney</function-class><!-- 所使用的类 -->
		<function-signature>String changeNumMoneyToChinese(java.lang.String)</function-signature>
		<example>${ChangeNumMoney:changeNumMoneyToChinese(str)}</example><!-- 举例 -->      
       </function>
</taglib>

 

 3、新建一个jsp文件进行测试,我这里叫test.jsp: 

头部引入标签:<%@taglib prefix="myTag" uri="/WEB-INF/money.tld"  %>

显示到页面:

<body>
  数字格式:23456.1234<br /><br />
  大写格式:<c:out value="${myTag:changeNumMoneyToChinese(123456.1234) }"></c:out>  
</body>

4、关于使用split的一些注意点

①、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");
②、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");
“.”和“|”都是转义字符,必须得加"\\";
③、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");

分享到:
评论

相关推荐

    java 类 金额转换成大写

    下面我们来详细介绍如何使用 Java 实现金额转换成大写的功能。 实例代码分析 首先,我们来分析上面的实例代码。在这个实例中,我们创建了一个名为 `SimpleMoneyFormat` 的 Java 类,该类使用单例模式来实现金额...

    Ireport实现金额大写(自己实现的)

    本文将详细介绍如何使用Ireport内置的Scriptlet功能实现将金额转换为大写的汉字表示,这对于财务报表的制作尤为重要,因为在中国,金额通常需要以中文大写的形式出现,以增加数据的准确性,防止篡改。 首先,我们要...

    java将数字转换成大写字母

    在Java编程语言中,将数字转换为大写字母涉及到字符编码和字符串操作。这个过程通常用于格式化输出,比如在创建验证码、显示特定格式的序列号或者处理与数字相关的特殊需求时。以下是一些关键的知识点,解释了如何在...

    转换成中文大写金额

    6. **组合结果**:将转换后的整数部分、小数部分和单位组合成完整的中文大写金额。 在`MoneyUtil.java`和`MoneyFormat.java`这两个文件中,我们可以预见到定义了这些逻辑的函数和类。通过阅读源代码,我们可以学习...

    数字转换成大写,例如:123 转换后:一百二十三

    在编程领域,尤其是在Java语言中,将数字转换为大写汉字是常见的需求,尤其是在财务、会计等场景下,为了满足规范和格式要求。这个过程通常称为数字汉字转换,它涉及到字符编码、字符串处理以及数学运算等多个方面的...

    JSP自定义标签JSP自定义标签

    `setBodyContent()`方法用于设置标签体内容,`doAfterBody()`方法则将内容转换为大写并输出。 6. **优势**:使用自定义标签的优点包括: - 分离关注点:将Java代码与HTML模板分离,提高了代码的可读性和可维护性。...

    自定义标记实现银行系统的数字大小写转换

    在银行系统中,数字的表示方式往往遵循特定的规则,比如使用大写的汉字来表示金额,以增强账目的清晰度和防止篡改。这个自定义标记的实现旨在为银行系统提供一个便捷的方法,将阿拉伯数字自动转换为符合银行业规范的...

    java实现将数字转换成人民币大写

    【Java实现将数字转换成人民币大写】的代码主要涉及了将数字转化为中文大写汉字的逻辑,这对于财务系统和报表生成来说是非常重要的功能。在Java中,这个过程可以通过自定义类来实现,例如创建一个名为`Rmb`的类。...

    北大青鸟的jsp自定义标签

    在Java类中,需要重写`setBodyContent()`和`doAfterBody()`方法,前者用于获取和打印标签体内容,后者用于将内容转为大写并输出到页面。 通过理解和实践自定义标签,开发者可以更好地构建可扩展和易于维护的JSP应用...

    java 取出汉语字符串各汉字拼音首字母并大写

    在Java中实现提取汉语字符串各汉字拼音首字母并将其转换为大写是一项常见的需求,尤其是在处理中文文本数据时。本篇文章将详细介绍如何通过Java代码来实现这一功能,并对相关的知识点进行深入探讨。 #### 一、需求...

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

    这个功能的主要目的是将用户输入的数字人民币金额转换成规范的汉字大写形式,以满足财务报告和审计的要求。以下是对这一功能的详细说明: 1. **输入处理**:首先,程序需要一个文本框供用户输入数字人民币金额。...

    阿拉伯数字转换成大写字体jsp

    在Java中,数字转换为大写字母通常需要通过字符串的转换函数,如`String.toUpperCase()`,将数字的每一位转换为对应的英文大写字母。因为阿拉伯数字和英文大写字母之间没有直接的对应关系,所以可能需要自定义一个...

    j2ee银行转换系统

    在这个银行转换系统中,自定义标签可能包含了一个处理数字转换的函数,当在JSP页面中使用这个标签时,可以轻松地将用户输入的数字转换成大写形式。 数字转换是此系统的核心功能。在编程中,转换小写数字到大写数字...

    MYSQL金额转大写.7z

    如果需要处理的是整数部分的大写转换,还需要进一步扩展映射表,包含0到9的映射,并处理千位、万位等的连接符。对于复杂的转换,可能需要编写存储过程或借助编程语言(如Python、Java等)来实现。 总之,在MySQL中...

    java写的货币转换

    在这个特定的场景中,我们关注的是如何使用Java来实现货币转换的功能,特别是将数字转化为大写汉字,这是财务和会计领域中常见的需求,以确保金额的清晰性和准确性。 货币转换涉及到的主要知识点包括: 1. **数字...

    java实现大小写转换,在控制台实现

    实现阿拉伯数字转化为大写汉字;eg:1200-&gt;壹仟贰佰元整

    金额转大写

    标题中的“金额转大写”指的是在编程中将数字金额转换为中文大写的表示方式,这是在财务系统或发票处理中常见的需求。在中文里,数字有特定的大写表示,例如1对应壹,2对应贰,以此类推,用于防止篡改和提高财务记录...

    ireport scriptlet脚本的使用

    对于描述中提及的“将小写金额转换成大小”,这通常涉及到数字到汉字的转换,例如将数字"123456.78"转换为汉字的“壹拾贰万叁仟肆佰伍拾陆元柒角捌分”。这种转换可以通过预先定义好的映射表或者使用已有的库来实现...

Global site tag (gtag.js) - Google Analytics