数字转换为汉语中人民币的大写

本文介绍了一种将数字字符串转换成人民币大写格式的方法。通过定义数字和货币单位的汉字映射,实现整数与小数部分的分别转换,并处理特殊情况如零等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中吧数字转换为人民币大写格式,网上有很多方法,现在这是跟据被人的方法改编的,更容易理解一些

 

package com.lm.util;


public class Test {
	/**
	 * 汉语中数字大写
	 */
	private static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆",
			"伍", "陆", "柒", "捌", "玖" };
	/**
	 * 汉语中货币单位大写,这样的设计类似于占位符
	 */
	private static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元",
			"拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾",
			"佰", "仟" };
	/**
	 * 特殊字符:整
	 */
	private static final String CN_FULL = "整";
	/**
	 * 把输入的金额转换为汉语中人民币的大写
	 * 
	 * @param numberOfMoney
	 *            输入的金额
	 * @return 对应的汉语大写
	 */
	public static String number2CNMontrayUnit(String str) {
		String headInteger = null;//整数部分
		String endDecimal = null;//小数部分
		if(str.contains(".")){
			headInteger = str.substring(0, str.indexOf("."));
			endDecimal = str.substring(str.indexOf(".") + 1);
		}else{
			headInteger = str;
		}
		long headIntegerValue = (long) (Double.parseDouble(headInteger.trim()));
		int numUnit = 0;
		boolean getZero = false;//判断是否为零
		String prefix = ""; // 整数部分转化的结果
		String suffix = ""; // 小数部分转化的结果
		// 处理小数点后面的数
		if (null == endDecimal || endDecimal.equals("00") ) {
			suffix = CN_FULL;
		} else {
			//角位是零的
			if(endDecimal.charAt(0) == '0'){
				suffix =  CN_UPPER_NUMBER[endDecimal.charAt(1) - '0'] + CN_UPPER_MONETRAY_UNIT[0] + suffix ;
			}else if(endDecimal.charAt(1) == '0'){
				suffix = suffix + CN_UPPER_NUMBER[endDecimal.charAt(0) - '0'] + CN_UPPER_MONETRAY_UNIT[1];
			}else{
				suffix = CN_UPPER_NUMBER[endDecimal.charAt(1) - '0'] + CN_UPPER_MONETRAY_UNIT[1]
					+  CN_UPPER_NUMBER[endDecimal.charAt(0) - '0'] + CN_UPPER_MONETRAY_UNIT[0]; 
			}
		}
		//循环处理整数部分
		for (int i = 0; i < headInteger.length(); i++) {
			numUnit = (int) (headIntegerValue % (10));
			if(numUnit > 0){
				prefix = CN_UPPER_NUMBER[numUnit] + CN_UPPER_MONETRAY_UNIT[i+2] + prefix ;
				getZero = false;
			}else{
				if (!(getZero)) {
					prefix =   CN_UPPER_MONETRAY_UNIT[i+2] + CN_UPPER_NUMBER[0] + prefix;
				}
				getZero = true;
			}
			headIntegerValue = headIntegerValue/10;//每次循环去掉最后一位
		}
		return prefix + suffix;
	}
	public static void main(String[] args) {
//		String str = "100091654658.99";
		String str = "10";
		System.out.println(str);
		String number2cnMontrayUnit = Test.number2CNMontrayUnit(str);
		System.out.println(number2cnMontrayUnit);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值