Java 金额转换 阿拉伯数字金额转换成汉字大写金额

Java 金额转换 阿拉伯数字金额转换成汉字大写金额

  • 写的不是很完善,仅供参考!还望各大佬多多指点!下面直接上代码:
package demo;

import java.math.BigDecimal;
import java.util.Scanner;

public class MoneyToCN2 {
	
	private static final String CNSUM[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	private static final String SMALLSUM[] = {"分","角"};
	private static final String MIDSUM[] = {"","拾","佰","仟"};
	private static final String BIGSUM[] = {"","万 ","亿 "};
	
	private static final String YUAN = "圆";
	private static final String YUANZHENG = "圆整";
	private static final String LINGYUANZHENG = "零圆整";
	
	/**
	 * 默认精确到小数点后两位
	 */
	private static final int PRECISION = 2;
	
	/**
	 * 阿拉伯数字类型的金额 转换为 汉字大写金额类型
	 * @param strMoney 输入后经过四舍五入的金额(保留两位小数,保留位数可更改)
	 * @return 汉字大写金额
	 */
	public static String toCN(String strMoney){
		//用于接收转换了的汉字大写金额
		StringBuffer sb = new StringBuffer();
		
		String str[] = strMoney.split("\\.");  //根据小数点将金额分成两部分
		String strLeft = str[0];               //金额的整数部分
		String strRight = str[1];              //金额的小数部分
		
		/**
		 * 小数部分是否为零的情况
		 */
		if(Integer.parseInt(strRight)!=0){
			//小数部分不为零,先读小数部分的角、分情况
			
			int fen = Integer.parseInt(strRight.substring(1));
			int jiao = Integer.parseInt(strRight.substring(0,1));
			if(fen != 0){
				sb.insert(0,  SMALLSUM[0]);
				sb.insert(0, toUpperNumber(fen));
			}
			if(jiao != 0){
				sb.insert(0,  SMALLSUM[1]);
				sb.insert(0, toUpperNumber(jiao));
			}
			
			//如果整数部分不为零,先将“圆”添加上去
			if(Long.parseLong(strLeft)!=0){
				sb.insert(0, YUAN+" ");
			}
			
		}else{
			//小数部分为零,小数后面的部分忽略不读,即均为   “圆整” 情况
			sb.append(YUANZHENG);
			//如果整数部分也为零,那就是“零圆整”  0.00
			if(Long.parseLong(strLeft)==0){
				return LINGYUANZHENG;
			}
		}
		
		int leftLength = strLeft.length();    //整数部分的位数
		
		if(leftLength <= 4){
			//金额不超过上千的话
			
			MidToUpper(strLeft, sb);
			return sb.toString();
			
		}else{
			//金额上万起步的话
			
			//将整数部分的金额拆成4个长度为一组的数,第一组单位“”,第二组单位“万”,第三组单位“亿”
			//到底要分成几组?fenzu<=3
			int fenzu = 0;
			if(leftLength%4!=0){
				fenzu = leftLength/4+1;
			}else{
				fenzu = leftLength/4;
			}
			
			//整数部分拆分出来的小组都装进leftMoney数组中
			String leftMoney[] = new String[fenzu];
			
			//将左边的整数拆分成最多四位的数组
			for(int i=0; i0){
					leftMoney[i] = strLeft.substring(indexBegin, leftLength-4*i);
				}else{
					//indexBegin≤0,即将要切分的字符串已经不足4位
					leftMoney[i] = strLeft.substring(0, leftLength-4*i);
				}
			}
			
			//j<=2 进行小组阿拉伯金额转换成大写汉字金额
			for(int j=0; j肆仟壹佰捌拾壹
	 * @param str 整数金额的字符串形式(最高四位数)
	 * @param sb 转换后的大写金额
	 * @return 返回大写金额
	 */
	public static String MidToUpper(String str, StringBuffer sb){
		
		if(str == null || str.trim().length() == 0){
			return "";
		}
		
		int strLength = str.length();
		
		for(int i=0; i=0 && num<=9){
			return CNSUM[num];
		}
		return "";
	}
	
	
	public static void main(String[] args) {
		while(true){
			System.out.print("1.请输入最高整数为12位的金额:");
			BigDecimal money = new Scanner(System.in).nextBigDecimal();
			
	        String strMoney = money.setScale(PRECISION, BigDecimal.ROUND_HALF_UP).toString();
			System.out.println("2.输入的金额保留两位小数后为:" + strMoney);
			
			if(strMoney.length()>15){
				System.out.println("3.抱歉,本小宝无法转换超过 上千亿 的金额!");
				
			}else{
				System.out.println("3.将其转换成汉字大写金额后为:" + toCN(strMoney));
			}
			
			System.out.println();
			
		}
		
	}

}

你可能感兴趣的:(Java,面试题,Java小代码块)