`
joy_cz
  • 浏览: 130726 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java版数值转大写人民币的类

    博客分类:
  • JAVA
阅读更多
package com.syncshock.bmh.msn;

public class Money//调试时用main函数 
{
	public static void main(String args[])
	{ 
		Money mon = new Money(); 
		//System.out.println(-99999999999999.999+mon.NumToRMBStr(-99999999999999.999)); 
		//System.out.println(99999999999999.999+mon.NumToRMBStr(99999999999999.999)); 
		//System.out.println(mon.NumToRMBStr(100000000.00)); 
		System.out.println(mon.NumToRMBStr(10.3)); 
	}
	String HanDigiStr[] = new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	String HanDiviStr[] = new String[]{"","拾","佰","仟","万","拾","佰","仟","亿", "拾","佰","仟","万","拾","佰","仟","亿", "拾","佰","仟","万","拾","佰","仟" };
	String PositiveIntegerToHanStr(String NumStr) 
	{ 
		// 输入字符串必须正整数,只允许前导空格(必须右对齐),不宜有前导零 

		String RMBStr = "";
		boolean lastzero = false;
		boolean hasvalue= false; 
		// 亿、万进位前有数值标记 
		int len,n; 
		len = NumStr.length(); 
		if( len > 15 ) return "数值过大!"; 
		for(int i=len-1;i>=0;i--) 
		{ 
			if( NumStr.charAt(len-i-1)==' ' ) continue; 
			n = NumStr.charAt(len-i-1) - '0'; 
			if( n<0 || n>9 ) return "输入含非数字字符!";	
			if( n!=0 ) { 
				if( lastzero ) RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零 
				// 除了亿万前的零不带到后面 //
				if( !( n==1 && (i%4)==1 && (lastzero || i==len-1) ) ) // 如十进位前有零也不发壹音用此行 
					if( !( n==1 && (i%4)==1 && i==len-1 ) ) // 十进位处于第一位不发壹音 
						RMBStr += HanDigiStr[n]; RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空 
					hasvalue = true; // 置万进位前有值标记		
			}
			else 
			{ 
				if( (i%8)==0 || ((i%8)==4 && hasvalue) ) // 亿万之间必须有非零值方显示万 
					RMBStr += HanDiviStr[i]; // “亿”或“万” 
				} if( i%8==0 ) hasvalue = false ; // 万进位前有值标记逢亿复位 
				lastzero = (n==0) && (i%4!=0); 
			}
			
			if( RMBStr.length()==0 ) return HanDigiStr[0]; // 输入空字符或"0",返回"零" 
		return RMBStr; 
		}
	String NumToRMBStr(double val) 
	{ 
		String SignStr ="" ; 
		String TailStr =""; 
		long fraction, integer; 
		int jiao,fen;
		if( val<0 ) 
		{ 
			val = -val; 
			SignStr = "负"; 
		} 
		if(val > 99999999999999.999 || val <-99999999999999.999 ) return "数值位数过大!"; // 四舍五入到分 
		long temp = Math.round(val*100); 
		integer = temp/100; 
		fraction = temp%100; 
		jiao = (int)fraction/10; 
		fen = (int)fraction%10; 
		if( jiao==0 && fen==0 ) 
		{ 
			TailStr = "整"; 
		} 
		else
		{ 
			TailStr = HanDigiStr[jiao]; 
			if( jiao!=0 ) 
				TailStr += "角"; 
			if( integer==0 && jiao==0 ) // 零元后不写零几分 
				TailStr = ""; 
			if( fen!=0 ) 
					TailStr += HanDigiStr[fen] + "分"; 
		}
				
		// 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分” // 
		//if( !integer ) 
			//return SignStr+TailStr;
		return "¥"+SignStr+PositiveIntegerToHanStr(String.valueOf(integer) )+"元"+TailStr; 
		}
}
1
0
分享到:
评论
1 楼 suhui2009 2011-12-13  
请问下楼主,如果我输入的金额过大该怎么办呢?

相关推荐

Global site tag (gtag.js) - Google Analytics