`

使用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");

分享到:
评论

相关推荐

    安川MP7系列工控系统源码解析:关键算法与硬件交互揭秘

    内容概要:本文深入剖析了安川MP7系列工业控制系统的关键源码,重点介绍了运动轨迹规划、通信协议处理以及故障处理机制等方面的技术细节。通过对实际代码片段的解读,揭示了该系统在硬件寄存器直接访问、特殊功能码处理等方面的独特之处。同时,文中还分享了一些基于实践经验得出的重要参数设置及其背后的故事,如特定摩擦补偿系数的选择原因等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对安川产品有一定了解并希望深入了解其内部工作机制的专业人士。 使用场景及目标:帮助读者掌握安川MP7系列控制器的工作原理,提高对类似系统的维护能力和故障排查效率。对于想要进一步研究或二次开发该系统的开发者来说,也能提供宝贵的参考资料。 其他说明:文章不仅限于理论讲解,还包括了许多来自一线的实际案例和经验教训,使读者能够更好地理解和应用所学知识。

    自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_.zip

    自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_

    嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip

    嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip

    嵌入式八股文面试题库资料知识宝典-C语言总结.zip

    嵌入式八股文面试题库资料知识宝典-C语言总结.zip

    风储直流微电网母线电压控制策略与双闭环MPPT技术研究

    内容概要:本文详细探讨了风储直流微电网中母线电压控制的关键技术。首先介绍了风储直流微电网的背景和发展现状,强调了母线电压控制的重要性。接着阐述了永磁风机储能并网技术,解释了永磁风机如何通过直接驱动发电机将风能转化为电能,并确保与电网的同步性和稳定性。然后深入讨论了双闭环控制MPPT技术,这是一种通过内外两个闭环控制系统来实现实时调整发电机运行参数的技术,确保风机始终处于最大功率点附近。最后,文章探讨了储能控制母线电压平衡的方法,即通过储能系统的充放电操作来维持母线电压的稳定。结论部分指出,通过这些技术的有机结合,可以实现对风储直流微电网的有效管理和优化控制。 适合人群:从事新能源技术研发的专业人士、电气工程研究人员、风电系统工程师。 使用场景及目标:适用于希望深入了解风储直流微电网母线电压控制策略的研究人员和技术人员,旨在帮助他们掌握最新的控制技术和方法,以提高系统的稳定性和效率。 其他说明:文章还对未来风储直流微电网的发展进行了展望,指出了智能化和自动化的趋势,以及储能技术的进步对系统性能的影响。

    嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip

    嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip

    【操作系统开发】HarmonyOS目录结构详解:构建高效开发环境与跨设备协同应用

    内容概要:文章详细介绍了HarmonyOS的目录结构及其重要性,从整体框架到核心目录的具体功能进行了全面剖析。HarmonyOS凭借其分布式架构和跨设备协同能力迅速崛起,成为全球操作系统领域的重要力量。文章首先概述了HarmonyOS的背景和发展现状,强调了目录结构对开发的重要性。接着,具体介绍了根目录文件、AppScope、entry和oh_modules等核心目录的功能和作用。例如,AppScope作为全局资源配置中心,存放应用级的配置文件和公共资源;entry目录是应用的核心入口,负责源代码和界面开发。此外,文章还对比了HarmonyOS与Android、iOS目录结构的异同,突出了HarmonyOS的独特优势。最后,通过旅游应用和电商应用的实际案例,展示了HarmonyOS目录结构在资源管理和代码组织方面的应用效果。; 适合人群:具备一定编程基础,尤其是对移动操作系统开发感兴趣的开发者,包括初学者和有一定经验的研发人员。; 使用场景及目标:①帮助开发者快速理解HarmonyOS的目录结构,提高开发效率;②为跨设备应用开发提供理论和技术支持;③通过实际案例学习资源管理和代码组织的最佳实践。; 其他说明:HarmonyOS的目录结构设计简洁明了,模块职责划分明确,有助于开发者更好地管理和组织代码和资源。随着万物互联时代的到来,HarmonyOS有望在开发便利性和生态建设方面取得更大进展,吸引更多开发者加入其生态系统。

    飞轮储能充放电控制Simulink仿真模型:基于永磁同步电机的矢量控制与dq轴解耦

    内容概要:本文详细介绍了飞轮储能充放电控制的Simulink仿真模型,重点在于采用永磁同步电机的矢量控制和dq轴解耦控制策略。充电时,外环控制转速,内环控制dq轴电流;放电时,外环控制直流母线电压,内环同样控制dq轴电流。文中还讨论了硬件与软件环境的选择,以及仿真模型的调试与运行情况,最终得出该模型具有良好的跟随性能和波形完美度。 适用人群:从事电力电子系统、储能技术和Simulink仿真的研究人员和技术人员。 使用场景及目标:适用于需要对飞轮储能系统进行深入研究和仿真的场合,旨在提高充放电效率和稳定性,满足不同应用场景的需求。 其他说明:该仿真模型已调试完成,可以直接用于进一步的研究和实际应用,为未来的飞轮储能技术研发提供了有价值的参考。

    嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip

    嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip

    1_15套python PDF格式.zip

    1_15套python PDF格式.zip

    三相三电平整流器仿真:基于电压电流双闭环控制与SPWM调制的性能分析

    内容概要:本文详细介绍了三相三电平整流器的仿真过程及其性能分析。文中首先概述了三相三电平整流器的基本概念及其在电力系统中的重要作用,接着重点探讨了电压电流双闭环控制方式的工作原理和优势,以及SPWM调制技术的具体应用。通过仿真文件展示了整流器在不同条件下的响应情况,验证了这两种技术的有效性和优越性。最后,作者表达了对未来实际应用的期望。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力控制系统感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解三相三电平整流器工作原理和技术细节的研究人员;目标是在理论基础上掌握电压电流双闭环控制和SPWM调制的实际应用方法。 其他说明:本文提供的仅为仿真文件,未涉及实物实验数据。

    嵌入式八股文面试题库资料知识宝典-恒光科技.zip

    嵌入式八股文面试题库资料知识宝典-恒光科技.zip

    嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip

    嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip

    嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip

    嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip

    Arduino UART实验例程【正点原子EPS32S3】

    Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。

    嵌入式八股文面试题库资料知识宝典-朝歌数码.zip

    嵌入式八股文面试题库资料知识宝典-朝歌数码.zip

    嵌入式八股文面试题库资料知识宝典-Cortex系列.zip

    嵌入式八股文面试题库资料知识宝典-Cortex系列.zip

    嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip

    嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip

    智能车辆自适应巡航ACC与纵向跟车避撞的分层式控制及模糊权重调整策略

    内容概要:本文详细介绍了自适应巡航(ACC)控制和纵向跟车避撞控制的分层式控制策略。上层控制通过建立离散跟车运动学模型和基于反馈校正的跟车预测模型,获得期望加速度;下层控制则根据上层提供的数据计算期望制动压力和节气门开度。文中特别强调了引入松弛因子进行多目标优化求解,以及利用模糊控制动态调整权重系数的方法,如车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar。通过这种方式,系统能够在复杂多变的道路环境中保持灵活性和稳定性。仿真结果显示,在前车以50~70km/h的正弦速度变化行驶的情况下,自车能够平稳跟车,各项参数变化平稳。 适合人群:从事智能车辆研究的技术人员、自动驾驶领域研究人员、高校相关专业师生。 使用场景及目标:适用于智能车辆系统的设计与开发,特别是需要提升ACC系统性能的研究项目。目标是提高驾驶的安全性、舒适性和经济性。 其他说明:实验基于Matlab/Simulink 2021a和Carsim 2019.0版本完成,提供了完整的运行视频和参考资料。

Global site tag (gtag.js) - Google Analytics