Java 数字价格转为中文大写表达

本文介绍了如何将Java中的数字转换成中文大写,利用字符串常量数组完成基础转换,并探讨了中文语言在数字表达中的特殊性。同时,提供了代码实现和测试案例。


1.实现功能

a.基本的阿拉伯数字和中文大写的转换,通过一个常量string[]来实现即可

b.中文语言的特殊之处,比如

	每级末尾不管有几个0,都不读,其他数位有一个0或连续几个0,都只读一个“零”。	

2代码实现

package test;

import java.text.DecimalFormat;

class Num2Rmb{
	private	String[] hanArr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖","拾"};
	private	String[] unitArr = {"圜","拾","佰","仟","万","拾","佰","仟","亿","拾","佰","仟", "拾", "佰", "仟", "兆", "拾"};		
	
	public String toHanStr(double numStr) {
		String result = "";
		DecimalFormat format = new DecimalFormat("#.00");
		String num = format.format(numStr);
		System.out.print(num);
		int bit = num.indexOf('.');
		String total = num.substring(0, bit);
		result += totleStr(total);
		if(bit == num.length()-1)
			result += "整";
		else {
			String other = num.substring(bit+1,num.length());
			result += otherStr(other);
		}
		return result;
	}
	
	public String otherStr(String num) {
		String result = "";
		char jiao = num.charAt(0) ;
		char fen = num.charAt(1) ;
		if(jiao == '0' && fen == '0')
			result+="整";
		if(jiao != '0')
			result += (hanArr[jiao-'0'] +"角");
		if(fen!= '0')
			result += (hanArr[fen - '0']+"分");
		return result;
	}
	
	public String totleStr(String num) {
		//String num = String.valueOf(numStr);
		int numLen = num.length();
		String result = "";
		for(int i =  0; i < numLen; i++) {
			int numtemp = num.charAt(i)- '0';
			if(numtemp != 0 &&(numLen - 1 - i)%4 != 0 ) {
				result += (hanArr[ numtemp ]+ unitArr[numLen - 1 - i]);
			}
			else {
				if(numtemp != 0)
					result += (hanArr[numtemp]);
				else {
					int low = ((numLen-1-i)/4)*4;//每级的最低位
					int lowbit = numLen - low - 1;

					//判断是不是每级末尾的连续零,如果是的话,这个零不读
					boolean all_zero = true;
					for(int j = i;j<=lowbit;j++) {
						if((num.charAt(j)-'0') != 0){
							all_zero = false;
							break;
						}
					}
					
					//判断是不是连零,只读下一位的数字不是零的,那一个零
					if(!all_zero && (numLen - 1 - i)%4 != 0) {
						if((num.charAt(i+1)-'0')!=0) {
							result += (hanArr[numtemp]);
						}							
					}
				}
				
				if((numLen - 1 - i)%4 == 0){
					result += ( unitArr[numLen - 1 - i]);
				}
			}
		}
		return result;
	}
}

public class P103 {
	public static void main(String[] args) {
		Num2Rmb nr = new Num2Rmb();
		System.out.println(nr.toHanStr(30230560.3579));
		System.out.println(nr.toHanStr(2020004));
		System.out.println(nr.toHanStr(2020004.01));
		System.out.println(nr.toHanStr(20004));
		System.out.println(nr.toHanStr(2000004));
		System.out.println(nr.toHanStr(2000000));
		System.out.println(nr.toHanStr(2000000000));
	}
}

4.代码测试




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值