`

J2EE工具类:MoneyUtil.java小写钱转成大写钱

阅读更多
package com.worthtech.app.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MoneyUtil {
	private static final Pattern AMOUNT_PATTERN =   
	        Pattern.compile("^(0|[1-9]\\d{0,11})\\.(\\d\\d)$"); // 不考虑分隔符的正确性  
	private static final char[] RMB_NUMS = "零壹贰叁肆伍陆柒捌玖".toCharArray();  
	private static final String[] UNITS = {"元", "角", "分", "整"};  
	private static final String[] U1 = {"", "拾", "佰", "仟"};  
	private static final String[] U2 = {"", "万", "亿"};  
	
	/** 
	* 将金额(整数部分等于或少于12位,小数部分2位)转换为中文大写形式. 
	* @param amount 金额数字 
	* @return       中文大写 
	* @throws IllegalArgumentException 
	*/  
	public static String convert(String amount) throws IllegalArgumentException {  
	// 去掉分隔符  
	amount = amount.replace(",", "");  
	
	// 验证金额正确性  
	if (amount.equals("0.00")) {  
	    throw new IllegalArgumentException("金额不能为零.");  
	}  
	Matcher matcher = AMOUNT_PATTERN.matcher(amount);  
	if (! matcher.find()) {  
	    throw new IllegalArgumentException("输入金额有误.");  
	}  
	
	String integer  = matcher.group(1); // 整数部分  
	String fraction = matcher.group(2); // 小数部分  
	
	String result = "";  
	if (! integer.equals("0")) {  
	    result += integer2rmb(integer) + UNITS[0]; // 整数部分  
	}  
	if (fraction.equals("00")) {  
	    result += UNITS[3]; // 添加[整]  
	} else if (fraction.startsWith("0") && integer.equals("0")) {  
	    result += fraction2rmb(fraction).substring(1); // 去掉分前面的[零]  
	} else {  
	    result += fraction2rmb(fraction); // 小数部分  
	}  
	
	return result;  
	}  
	
	// 将金额小数部分转换为中文大写  
	private static String fraction2rmb(String fraction) {  
	char jiao = fraction.charAt(0); // 角  
	char fen  = fraction.charAt(1); // 分  
	return (RMB_NUMS[jiao - '0'] + (jiao > '0' ? UNITS[1] : ""))  
	        + (fen > '0' ? RMB_NUMS[fen - '0'] + UNITS[2] : "");  
	}  
	
	// 将金额整数部分转换为中文大写  
	private static String integer2rmb(String integer) {  
	StringBuilder buffer = new StringBuilder();  
	// 从个位数开始转换  
	int i, j;  
	for (i = integer.length() - 1, j = 0; i >= 0; i--, j++) {  
	    char n = integer.charAt(i);  
	    if (n == '0') {  
	        // 当n是0且n的右边一位不是0时,插入[零]  
	        if (i < integer.length() - 1 && integer.charAt(i + 1) != '0') {  
	            buffer.append(RMB_NUMS[0]);  
	        }  
	        // 插入[万]或者[亿]  
	        if (j % 4 == 0) {  
	            if (i > 0 && integer.charAt(i - 1) != '0'  
	                    || i > 1 && integer.charAt(i - 2) != '0'  
	                    || i > 2 && integer.charAt(i - 3) != '0') {  
	                buffer.append(U2[j / 4]);  
	            }  
	        }  
	    } else {  
	        if (j % 4 == 0) {  
	            buffer.append(U2[j / 4]);     // 插入[万]或者[亿]  
	        }  
	        buffer.append(U1[j % 4]);         // 插入[拾]、[佰]或[仟]  
	        buffer.append(RMB_NUMS[n - '0']); // 插入数字  
	    }  
	}  
	return buffer.reverse().toString();  
	}
	/**
	 * 对金额的格式调整到分
	 * @param money
	 * @return
	 */
	public static String moneyFormat(String money){//23->23.00
		StringBuffer sb=new StringBuffer();
		if(money==null){
			return "0.00";
		}
		int index=money.indexOf(".");
		if(index==-1){
			return money+".00";
		}else{
			String s0=money.substring(0,index);//整数部分
			String s1=money.substring(index+1);//小数部分
			if(s1.length()==1){//小数点后一位
				s1=s1+"0";
			}else if(s1.length()>2){//如果超过3位小数,截取2位就可以了
				s1=s1.substring(0,2);
			}
			sb.append(s0);
			sb.append(".");
			sb.append(s1);
		}
		return sb.toString();
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		System.out.println(Util.moneyFormat("123.2803"));
//		System.out.println(Util.moneyFormat("123.28"));
//		System.out.println(Util.moneyFormat("123.2"));
//		System.out.println(Util.moneyFormat("123"));
//		System.out.println(Util.convert("1000.00"));
//		System.out.println(Util.convert(Util.moneyFormat("1000.0")));
//		System.out.println(Util.convert(Util.moneyFormat("1000")));
	}

}

分享到:
评论

相关推荐

    java 学习要点总结

    3. J2EE (Java Enterprise Edition):Java 企业版,通常用于网站开发。 4. J2SE (Java Standard Edition):Java 标准版,Java 客户端程序,其它版本基础。 5. J2ME (Java Micro Edition):Java 微型版,主要用于手机...

    J2EE项目代码编写规范.zip

    在J2EE(Java 2 Platform, Enterprise Edition)开发中,代码编写规范是确保项目质量、可维护性和团队协作效率的重要组成部分。这份"J2EE项目代码编写规范"文档涵盖了多个方面,旨在指导开发者遵循最佳实践,提升...

    JAVA项目代码编写规范[文].pdf

    - 全局工具类:公司名称.开发组名称.项目名称.util(如net.linkcn.util) 二、类命名规范 1. 基本命名规范:类和接口名应以大写字母开头,多单词时每个单词首字母大写,例如:StudentInfo、IStudentInfo。 2. 接口...

    开发编码规范.doc

    - 全局工具类:`cn.edu.jxnu.sksoftware.util` - Spring配置文件及资源文件:`cn.edu.jxnu.sksoftware.config.spring` - Web配置文件及资源文件:`cn.edu.jxnu.sksoftware.config.web` - 国际化配置文件及资源文件:...

    J2EE项目工程代码编写规范

    - **全局工具类所在包命名规范**:采用`公司名称.开发组名称.项目名称.util`的格式。 - 示例:`net.linkcn.util` #### 四、类命名规范 1. **基本命名规范**:类名应以大写字母开头,如果有多个单词,则每个单词首...

    J2ee开发命名规范文档

    J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems公司推出的一种企业级应用程序开发平台,它基于Java SE平台,并在此基础上增加了许多针对大型分布式系统的新特性。为了提高项目的可维护性、可读性和...

    Java编程指南.ppt

    随着版本的发展,从1.2版开始,SUN公司将之命名为"Java2",目前Java已发展到1.5版,并分为J2SE(Java Standard Edition)、J2ME(Java Micro Edition)和J2EE(Java Enterprise Edition)三个平台,分别适用于桌面...

    jAVA编程规范J2EE代码规范

    - 使用BeanUtils工具类复制数据。 5. **5.5 Struts标记库的使用** - 使用Struts提供的标记库简化页面逻辑。 #### 八、注释 1. **6.1 注释格式** - Javadoc风格的注释:使用`/** ... */`格式。 - 程序内部说明...

    Java复习---思考题

    - `java.util`:包含各种实用工具类,如集合框架、日期时间、随机数等。 - `java.io`:提供输入输出流处理,支持文件操作和网络通信。 - `java.awt`:图形用户界面(GUI)类库,用于创建窗口和控件。 - `java...

    java基础知识思考题+答案(个人整理)

    JDK不仅包括Java编译器(javac)和Java虚拟机(JVM),还包括了大量的工具类库以及Java语言规范。这意味着,任何对Java语言的改进都需要整合到JDK中,并作为新的版本发布。对于Java开发者而言,JDK是必备的基本工具集。 ...

    Java EE项目代码编写规范

    - **全局工具类所在包**:`net.linkcn.web.crm.util` #### 三、类命名规范 类命名规范旨在通过一致的命名方式提高代码的可读性和可维护性。 - **基本命名规范** - **类与接口**:以大写字母开头,每个单词首...

    电子版corejava

    - **JDK**:Java Development Kit,包含了编写和编译Java程序所需的所有工具,包括编译器、调试器和文档生成工具。 - **JRE**:Java Runtime Environment,包含了运行Java程序所需的所有组件,包括JVM和标准类库。 -...

    JAVA重点(手打).pdf

    - **1995年发布**:JAVA作为一种面向对象的编程语言,在1995年由Sun Microsystems公司正式发布。 - **OAK-JAVA雏形**:JAVA最初的雏形被称为OAK,其语法设计上受到了C++的影响,而面向对象的思想则借鉴了SMOLLTALK...

    JavaEE命名规范

    - **全局工具类**: `公司名称.开发组名称.项目名称.util` - 示例: `net.linkcn.util` #### 五、类命名规范 - **基本命名规则**: - 类和接口的命名应以大写字母开头,若有多个单词,则每个单词的首字母均需大写。 ...

    《Java-面向对象程序设计基础》章:Java语法基础(与“方法”有关文档共49张).pptx

    《Java-面向对象程序设计基础》章:Java语法基础 以下是从给定的文件中生成的知识点: Java 简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台的总称。Java 平台由 Java...

    java最新面试题大全

    - **起源与目标**:Java 最初由 Sun Microsystems 公司的一名工程师 James Gosling 在 1990 年代初期开发,最初的目标是为了创建家用电器的控制系统。后来,Java 被重新设计为一种用于网络应用的语言,并在互联网的...

    学校上课使用的java简单教程

    标识符则遵循一定的命名规则,如类名通常首字母大写,方法名首字母小写,常量全大写,变量名首字母小写,避免使用美元符号$作为标识符的一部分。 【Java的基本数据类型】 Java的数据类型分为两大类:原始类型(基本...

    JAVA重点(手打)[参照].pdf

    - **1995年发布**:JAVA作为一种面向对象的编程语言,在1995年由Sun Microsystems公司正式发布。 - **OAK-JAVA雏形**:JAVA最初的雏形被称为OAK,其语法设计上受到了C++的影响,而面向对象的思想则借鉴了SMOLLTALK...

    java 总结 北大青鸟

    2. 跨平台:Java程序编译成.class文件后,可以在任何安装了Java虚拟机(JVM)的平台上运行,实现“一次编写,到处运行”的理念。 3. 支持分布式网络应用:Java的设计使得构建分布式系统变得容易,它提供了网络通信所...

    java核心笔记

    编写第一个Java程序,遵循类名首字母大写、方法和变量首字母小写的编码规范。变量包括四要素:变量名、类型、初始化值和作用域。作用域决定了变量的有效范围,如局部变量仅在方法内部有效,成员变量在整个类中有效。...

Global site tag (gtag.js) - Google Analytics