原创

Java 实现数字转化为大写和人民币大写

Java实现数字转化为大写和人民币大写,代码如下:

package test;

import java.text.DecimalFormat;

public class Test {
	private static final String digit_0 = "零壹贰叁肆伍陆柒捌玖";
	private static final String digit_1 = "零一二三四五六七八九";
	private static final String[] digit_2 = { "", "十", "百", "千" };
	private static final String[] digit_3 = { "", "拾", "佰", "仟" };
	private static final String[] digit_4 = { "", "万", "亿", "万亿", "亿亿" };

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println(changeDigit("2012.12", false));
		System.out.println(changeDigit("210.12", true));
		System.out.println(changeNumberRMB(210.12));
	}

	/**
	 * Description: 数字转化成整数
	 * @url www.yoodb.com
	 * @param str
	 * @param bo
	 * @return
	 */
	public static String changeDigit(String str, boolean bo) {
		StringBuffer strbu = new StringBuffer();
		int dou = str.indexOf(".");
		// :判断是否为小数还是整数,长度小于零为整数
		if (dou < 0) {
			dou = str.length();
		}
		// :获取整数部分
		String inter = str.substring(0, dou);
		strbu.append(changeInteger(Long.parseLong(inter), bo));
		// :处理小数部分
		if (dou != str.length()) {
			strbu.append("点");
			// :获取小数点后所有数
			String xh = str.substring(dou + 1);
			for (int i = 0; i < xh.length(); i++) {
				if (bo) {
					strbu.append(digit_0.charAt(Integer.parseInt(xh.substring(
							i, i + 1))));
				} else {
					strbu.append(digit_1.charAt(Integer.parseInt(xh.substring(
							i, i + 1))));
				}
			}
		}
		String strs = strbu.toString();
		// :处理特殊情况,可能不全
		if (strs.startsWith("零")) {
			strs = strs.substring(1);
		}
		if (strs.startsWith("一十")) {
			strs = strs.substring(1);
		}
		while (strs.endsWith("零")) {
			strs = strs.substring(0, strs.length() - 1);
		}
		if (strs.startsWith("点")) {
			strs = "零" + strs;
		}
		if (strs.endsWith("点")) {
			strs = strs.substring(0, strs.length() - 1);
		}
		return strs;
	}

	/**
	 * 位数小于4时,调用处理数据
	 * @url www.yoodb.com
	 * @param str
	 * @param bo
	 * @return
	 */
	public static String readNumber(String str, boolean bo) {
		StringBuffer strbu = new StringBuffer();
		if (str.length() != 4) {
			return null;
		}
		for (int i = 0; i < 4; i++) {
			char ch = str.charAt(i);
			if (ch == '0' && i > 1 && str.charAt(i - 1) == '0') {
				continue;
			}
			if (ch != '0' && i > 1 && str.charAt(i - 1) == '0') {
				strbu.append('零');
			}
			if (ch != '0') {
				if (bo) {
					strbu.append(digit_0.charAt(ch - 48));
					strbu.append(digit_3[4 - i - 1]);
				} else {
					strbu.append(digit_1.charAt(ch - 48));
					strbu.append(digit_2[4 - i - 1]);
				}
			}
		}
		return strbu.toString();
	}

	/**
	 * 整数部分转换大写
	 * @url www.yoodb.com
	 * @param lon
	 * @param bo
	 * @return
	 */
	public static String changeInteger(long lon, boolean bo) {
		StringBuffer strbu = new StringBuffer();
		// :增加3位数,为了完成大写转换
		String strN = "000" + lon;
		int strN_L = strN.length() / 4;
		// :根据不同的位数长度,消除strN"0"的个数
		strN = strN.substring(strN.length() - strN_L * 4);
		for (int i = 0; i < strN_L; i++) {
			String s1 = strN.substring(i * 4, i * 4 + 4);
			String s2 = readNumber(s1, bo);
			strbu.append(s2);
			if (s2.length() != 0) {
				strbu.append(digit_4[strN_L - i - 1]);
			}
		}
		String s = new String(strbu);
		if (s.length() != 0 && s.startsWith("零"))
			s = s.substring(1);
		return s;
	}

	/**
	 * 人名币输出格式
	 * @url www.yoodb.com
	 * @param rmb
	 * @return
	 */
	public static String changeNumberRMB(double rmb) {
		String strRMB = "" + rmb;
		DecimalFormat df = new DecimalFormat("#.#");
		df.setMaximumFractionDigits(2);
		strRMB = df.format(rmb).toString();
		// :true人民币大写,并返回数据
		strRMB = changeDigit(strRMB, true);
		if (strRMB.indexOf("点") >= 0) {
			strRMB = strRMB + "零";
			strRMB = strRMB.replaceAll("点", "圆");
			String str1 = strRMB.substring(0, strRMB.indexOf("圆") + 1);
			String str2 = strRMB.substring(strRMB.indexOf("圆") + 1);
			strRMB = str1 + str2.charAt(0) + "角" + str2.charAt(1) + "分整";
		} else {
			strRMB = strRMB + "圆整";
		}
		return "人民币(大写):" + strRMB;
	}

}

希望对大家有帮助,有帮助的话帮忙求收藏一下本网站.

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信