`
f002489
  • 浏览: 265077 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
人民币转大写另类实现 good Me java 好吧!我承认我手贱!人民币转大写另类实现!大家帮偶看看
public String toRMB(double money) {
	char[] s1 = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'};
	char[] s4 = {'分', '角', '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万'};
	String str = String.valueOf(Math.round(money * 100 + 0.00001));
	String result = "";

	for (int i = 0; i < str.length(); i++) {
		int n = str.charAt(str.length() - 1 - i) - '0';
		result = s1[n] + "" + s4[i] + result;
	}

	result = result.replaceAll("零仟", "零");
	result = result.replaceAll("零佰", "零");
	result = result.replaceAll("零拾", "零");
	result = result.replaceAll("零亿", "亿");
	result = result.replaceAll("零万", "万");
	result = result.replaceAll("零元", "元");
	result = result.replaceAll("零角", "零");
	result = result.replaceAll("零分", "零");

	result = result.replaceAll("零零", "零");
	result = result.replaceAll("零亿", "亿");
	result = result.replaceAll("零零", "零");
	result = result.replaceAll("零万", "万");
	result = result.replaceAll("零零", "零");
	result = result.replaceAll("零元", "元");
	result = result.replaceAll("亿万", "亿");

	result = result.replaceAll("零$", "");
	result = result.replaceAll("元$", "元整");

	return result;
}
人民币转大写 java 好吧!我承认我手贱!人民币转大写另类实现!大家帮偶看看
/**
 * @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
		

	}

}
金额数字转中文大写 java 面试题求解 java
	public static String convertToWords(double value) {
		char[] hunit = { '拾', '佰', '仟' };
		char[] vunit = { '万', '亿' };
		char[] digit = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
		long midVal = (long) (value * 100); // 转化成整形
		if (midVal < 10L) {
			if (midVal == 0L) {
				return "零圆整";
			} else {
				return "零圆零角" + digit[String.valueOf(midVal).charAt(0) - '0'] + "分";
			}
		}
		String valStr = String.valueOf(midVal); // 转化成字符串
		String head = valStr.substring(0, valStr.length() - 2); // 取整数部分
		String rail = valStr.substring(valStr.length() - 2); // 取小数部分

		String prefix = EMPTY; // 整数部分转化的结果
		String suffix = EMPTY; // 小数部分转化的结果
		// 处理小数点后面的数
		if ("00".equals(rail)) { // 如果小数部分为0
			suffix = "整";
		} else {
			if (rail.charAt(1) == '0') {
				suffix = digit[rail.charAt(0) - '0'] + "角整"; // 如果没有分,则将角转换出来
			} else {
				suffix = digit[rail.charAt(0) - '0'] + "角" + digit[rail.charAt(1) - '0'] + "分"; // 否则把角分转化出来
			}
		}
		// 处理小数点前面的数
		char[] chDig = head.toCharArray(); // 把整数部分转化成字符数组
		char zero = '0'; // 标志'0'表示出现过0
		byte zeroSerNum = 0; // 连续出现0的次数
		for (int i = 0; i < chDig.length; i++) {
			int idx = (chDig.length - i - 1) % 4; // 取段内位置
			int vidx = (chDig.length - i - 1) / 4; // 取段位置
			if (chDig[i] == '0') { // 如果当前字符是0
				zeroSerNum++; // 连续0次数递增
				if (zero == '0') { // 标志
					zero = digit[0];
				} else if (idx == 0 && vidx > 0 && zeroSerNum < 4) {
					prefix += vunit[vidx - 1];
					zero = '0';
				}
				continue;
			}
			zeroSerNum = 0; // 连续0次数清零
			if (zero != '0') { // 如果标志不为0,则加上,例如万,亿什么的
				prefix += zero;
				zero = '0';
			}
			prefix += digit[chDig[i] - '0']; // 转化该数字表示
			if (idx > 0)
				prefix += hunit[idx - 1];
			if (idx == 0 && vidx > 0) {
				prefix += vunit[vidx - 1]; // 段结束位置应该加上段名如万,亿
			}
		}

		if (prefix.length() > 0) {
			prefix += '圆'; // 如果整数部分存在,则有圆的字样
		}
		return prefix + suffix; // 返回正确表示
	}
Global site tag (gtag.js) - Google Analytics