`
chuanheng
  • 浏览: 15187 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

人民币转大写(转)

阅读更多

 

/**
 * @author Joe Lin
 *
 */
public class Test {

	public static char[] hunit = { '拾', '佰', '仟' }; //  组内单位名
	public static char[] vunit = { '万', '亿' }; // 组单位名
	public static char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌',
			'玖' }; // 数字表示
	private static String unit = "元";
	
	
	private static boolean bspace = false;

	/**
	 * 组内的数字翻译
	 * @param sr
	 * @return
	 */
	public static String group(String sr) {
		boolean zero = false;
		StringBuffer s = new StringBuffer();
		for (int i = sr.length(); i > 0; i--) {
			if (zero && sr.charAt(sr.length() - i) == '0') { //如果上一个为o,且本位再次为零,忽略
			} else {
				if (sr.charAt(sr.length() - i) == '0') { //如果本位为零,打开零标志
					zero = true;
					if (sr.length() - i != 4) { //如果不是末尾的零,加入,否则丢弃
						s.append(digit[sr.charAt(sr.length() - i) - '0']);
					}
				} else {//如果本位不为零,加入,组内不为末位,添加组内单位名
					s.append(digit[sr.charAt(sr.length() - i) - '0']);
					if (i - 2 > -1) {
						s.append(hunit[i - 2]);

					}

				}
			}

		}
		return s.toString();
	}

	/**
	 * 翻译小数位
	 * @param st
	 * @return
	 */
	private static String toPoint(String st) {
		StringBuffer sb = new StringBuffer();
		if(!String.valueOf(st.charAt(0)).equals("0")){
			sb.append(digit[st.charAt(0) - '0'] + "角");
		}
		if(!String.valueOf(st.charAt(1)).equals("0")){
			sb.append(digit[st.charAt(1) - '0']+ "分");
		}
	
		return sb.toString();
	}

	
	/**
	 * 换算为中文数字
	 * 算法:01亿 2422万 3424亿 4312万 3123.12
	 * 包含小数位的截取,分别处理
	 * 小数位只处理两位
	 * 整数位以4位数字为一组进行分解,每组单独处理,按照规律,亿/万的组单位在每组后面加上(规则模2),
	 *  
	 * @param str
	 * @param space - 每组后是否加空格
	 * @return
	 */
	public static String toBig(String str,boolean space) {
		bspace = space;
		if (str.contains(".")) {
			String[] sr = str.split("\\.");
			long s = Long.valueOf(sr[0]);
			String srt = String.valueOf(s);
			if(bspace){
				return toNumber(srt)+unit+" "+toPoint(sr[1]);
			}
			return toNumber(srt)+unit+toPoint(sr[1]);
		}else{
			long s = Long.valueOf(str);
			String srt = String.valueOf(s);
			return toNumber(srt)+toPoint(srt);
		}
	}

	/**
	 * 翻译整数位  123 2323
	 * @param st
	 * @return
	 */
	private static String toNumber(String st) {
		int bLenth = st.length() % 4; //算出分组后剩余的位数 如 123  2334  则为3
		int groups = st.length() / 4; //算出组数   如 123  2334  则为1
		StringBuffer result = new StringBuffer();
		result.append(group(st.substring(0, bLenth))); //算出分组后剩余位数的数字 如 一百二十三
		if (groups > 1 && bLenth>0) { //如果分组后剩余数字大于1位,则给分组后剩余数字添加组单位   //如 123  2334  则为万
			if (groups % 2 == 0) { //组单位添加规则,模2为零为亿,否则为万
				result.append(vunit[1]);
			} else {
				result.append(vunit[0]);
			}
			if(bspace){
				result.append(" ");
			}
		}
		//System.out.println(result.toString());
		for (int i = 0; i < groups; i++) { //翻译分组的数字
	        
			String sg  = group(st.substring(bLenth + i * 4, bLenth + i * 4 + 4));
			//System.out.println("sg:"+sg);
			if(!sg.equals(String.valueOf(digit[0]))){ //如果本组不全为零 0000,添加翻译
				result.append(sg);  
				if (i + 1 != groups) { //如果不为末尾组,则添加组单位
					if (i % 2 == 0) {
						result.append(vunit[0]);
					} else {
						result.append(vunit[1]);
					}
					if(bspace){
						result.append(" ");
					}
				}
			}

		}
		return result.toString();
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(Test.toBig("012422342443123123.00",true));
		//System.out.println(4 % 2);
		// 6 6767 4545 4545 2323
		

	}

}
分享到:
评论

相关推荐

    小写人民币转大写ACCESS函数

    ### 小写人民币转大写ACCESS函数解析 #### 背景介绍 在日常的财务工作中,经常需要将数字格式的金额转换成汉字大写形式,尤其是在开具支票、填写电汇凭证或制作记账凭证时更为常见。这种转换不仅能够提高正式文件的...

    java实现数字转换人民币中文大写工具

    Java 实现数字转换人民币中文大写工具 Java 实现数字转换人民币中文大写工具是指使用 Java 语言将数字转换为人民币中文大写格式的工具。该工具具有很高的实用价值,特别是在人事业务系统开发中,经常需要将数字转换...

    python实现人民币大写转换

    本文实例为大家分享了python实现人民币大写转换的具体代码,供大家参考,具体内容如下 #!/usr/bin/python # -*- coding:utf-8 -*- # ********* 转换方法介绍 ********* # 将需要转换的数字从右向左,每4位分成一个...

    数字转大写实例 人民币转大写实例

    标题"数字转大写实例 人民币转大写实例"所涉及的知识点主要集中在以下几个方面: 1. **数字与汉字对应关系**:在中文中,数字0-9分别对应大写的零(零)、壹、贰、叁、肆、伍、陆、柒、捌、玖。例如,数字123.45在...

    人民币数字转大写.java

    人民币数字转大写.java

    JS实现人民币小写转大写

    在JavaScript编程中,有时我们需要将人民币的数字金额(小写)转换为中文的大写形式,以便于财务报表或发票的规范书写。这个过程涉及到字符映射、数字处理以及字符串操作等多个知识点。以下是对这个主题的详细说明:...

    java程序实现人民币大写转换

    这是一个把人民币数字转换成大写的java程序

    小写人民币转大写人民币

    首先,我们需要了解人民币大写的基本规则。人民币大写的表示方式如下: 1. 零:零 2. 一:壹 3. 二:贰 4. 三:叁 5. 四:肆 6. 五:伍 7. 六:陆 8. 七:柒 9. 八:捌 10. 九:玖 11. 十:拾 12. 百:佰 13. 千:...

    人民币金额小写转大写

    MFC制作的人民币小写金额转化大写金额,方便出差回来时报账填写账单大写RMB使用,欢迎下载

    人民币小写转大写,方便大家

    人民币小写转大写人民币小写转大写人民币小写转大写

    小写人民币转换成大写人民币

    小写转大写的转换规则主要涉及以下几点: 1. **数字与汉字的对应关系**:每个阿拉伯数字都有其对应的汉字表示。 - 0 对应 “零” - 1 对应 “壹” - 2 对应 “贰” - 3 对应 “叁” - 4 对应 “肆” - 5 对应...

    人民币数字转大写_金额转换小工具

    人民币数字转大写_金额转换小工具 财务人员经常用到。

    人民币小写金额转大写金额(java版)

    ### 人民币小写金额转大写金额(Java版) #### 概述 本文将详细介绍一个Java程序,该程序用于将小写的人民币金额转换为大写形式。此转换主要用于财务、会计和其他正式场合,在这些场合中,大写金额是标准且必须的...

    C/C++ 人民币数字大写转换

    C/C++ 人民币数字大写转换,阿拉伯数字中间有"0"时,中文大写要写"零"字,如¥1409.50,应写成:人民币壹仟肆佰零玖元伍角。可以提取个十百千万各个位的数值。

    人民币转换为大写

    人民币转换为大写

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

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

    人民币小写转大写dll

    "人民币小写转大写dll" 是一个特定的DLL文件,其功能专注于将人民币金额从小写形式转换为大写形式,这是在金融和会计软件中常见的需求,因为在中国,正式的财务记录通常要求金额以大写汉字表示,以防止篡改和提高...

    人民币转大写.exe

    人民币转大写.exe

    sql 人民币大写转换函数

    根据给定的SQL函数“MoneyToCapital”,我们可以深入解析并理解其如何实现将人民币数值转换为中文大写的功能。此函数不仅关注基本的数字转换,还考虑了进位处理、精度设定以及数值范围的限制,确保了转换结果的准确...

Global site tag (gtag.js) - Google Analytics