输入一个整数部分不超过12位的小数,变成人民币读法

package test;

import java.util.*; 

public class num2rmb {

	private String[] hanArr= {"零" , "壹" , "贰" , "叁" , "肆" ,    
	        "伍" , "陆" , "柒" , "捌" , "玖"};   
	private String[] unitArr = {"十", "百", "千"}; 

	private String[] divide(double num)   
    {   
        //将一个浮点数强制类型转换为long,即得到它的整数部分。   
        long zheng = (long)num;   
        //浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到2位小数。   
        //Math类的round方法,返回与参数最接近(经四舍五入后)的整数。   
        long xiao = Math.round((num - zheng) * 100);   
        //下面用了2种方法把整数转换为字符串。   
        //return一个匿名数组。   
        //String类的valueOf(int i)方法,返回整数参数的字符串表达式。   
        return new String[]{zheng + "",String.valueOf(xiao)};                        
    }   
	
	private String toHanStr(String numStr) 
	 {
		 int strLen = numStr.length();   
	     int yu = strLen % 4;   
	        //partNum表示该数字字符串可划分成的节数(每4位为一节)。   
	        //如余数等于0,则将strLen/4赋值给partNum;否则将strLen/4 + 1赋值给partNum。   
	     int partNum = yu == 0 ? strLen/4 : strLen/4 + 1;   
	        //firstPartLen表示第一节的长度   
	     int firstPartLen = strLen - (partNum - 1)*4;   //因为后面节的长度是总节数减-1,而后面肯定是满4个的
	     String resultFirst = "";   
	     String resultSecond = "";   
	     String resultThird = "";   
		 
	     for (int i = 0 ; i < partNum ; i ++ ) 
	     {
	    	 if (i == 0) 
	    	 {
	    		 String firstPart = numStr.substring(0, firstPartLen);
	    		 for(int j=0;j<firstPartLen;j++)
	             {
	                int num=firstPart.charAt(j)-48;
	                
	                if(j!=firstPartLen-1&&num!=0)
	                {
	                	resultFirst += hanArr[num] + unitArr[firstPartLen - 2 - j]; 
	                }
	                else if (j==firstPartLen-1&&num!=0) 
	                {
	                	resultFirst += hanArr[num];
	                }
	                else if(num==0)
	                {
	                	if(((j-1)>=0)&&firstPart.charAt(j-1)-48==0) continue;
	                    if(((j-1)>=0)&&firstPart.charAt(j-1)-48!=0&&((j+1)<=firstPartLen-1)&&firstPart.charAt(j+1)-48!=0)
	                    	resultFirst += hanArr[num];
	                }
	             }
	    	 }
	    	 else if(i==1)
	    	 {
	    		 String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
	             int secPartLen = 4;
	            
	             for(int j=0;j<secPartLen;j++)
	             {
	                int num=secondPart.charAt(j)-48;
	                if (Integer.parseInt(secondPart) == 0 && partNum == 3)
	                {
	                     resultSecond = hanArr[0]; 
	                     break;
	                } 
	                else if(j!=secPartLen-1&&num!=0)
	                {
	                	resultSecond += hanArr[num] + unitArr[secPartLen - 2 - j]; 
	                }
	                else if (j==secPartLen-1&&num!=0) 
	                {
	                	resultSecond += hanArr[num];
	                }
	                else if(num==0)
	                {
	                	if(((j-1)>=0)&&secondPart.charAt(j-1)-48==0) continue;
	                    if(((j-1)>=0)&&secondPart.charAt(j-1)-48!=0&&((j+1)<=secPartLen-1)&&secondPart.charAt(j+1)-48!=0)
	                    	resultSecond += hanArr[num];
	                }
	             }
	    	 }
	    	 else if(i==2)
	    	 {
	    		 String thirdPart = numStr.substring((firstPartLen + 4), strLen);
	             int thirdPartLen = 4;
	            
	             for(int j=0;j<thirdPartLen;j++)
	             {
	                int num=thirdPart.charAt(j)-48;
	                
	                if(j!=thirdPartLen-1&&num!=0)
	                {
	                	resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - j]; 
	                }
	                else if (j==thirdPartLen-1&&num!=0) 
	                {
	                	resultThird += hanArr[num];
	                }
	                else if(num==0)
	                {
	                	if(((j-1)>=0)&&thirdPart.charAt(j-1)-48==0) continue;
	                    if(((j-1)>=0)&&thirdPart.charAt(j-1)-48!=0&&((j+1)<=thirdPartLen-1)&&thirdPart.charAt(j+1)-48!=0)
	                    	resultThird += hanArr[num];
	                }
	             }
	    	 }
	    	 
	     }
	     
	     String result = "";  
	     
	     if (partNum == 1)   
	        {     
	            //如果数字仅为0   
	            if (resultFirst == "")   
	            {   
	                result = hanArr[0] + "元";   
	            }   
	            else  
	            {   
	                result = resultFirst + "元";   
	            }   
	        }   
	        else if (partNum == 2)   
	        {      
	            //如果第二节全为0   
	            if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)   
	            {   
	                result = resultFirst + "万";   
	            }   
	            else  
	            {   
	                result = resultFirst + "万" + " " + resultSecond+ "元";   
	            }              
	        }   
	        else if (partNum == 3)   
	        {      
	               
	        	if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0    
	                    && Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)   
	                {   
	                    result = resultFirst + "亿";   
	                } 
	                else if(Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0)   
	                {
	                	result = resultFirst + "亿"  +  " " + resultSecond + " " +  resultThird+ "元"; 
	                } 
	                else if(Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)  
	                {
	                	result = resultFirst + "亿" + " " + resultSecond + "万" + " " +  "元"; 
	                }   
	                else 
	                {
	                	result = resultFirst + "亿" + " " + resultSecond + "万" + " " + resultThird+ "元";
	                }          
	        }      
	        return result;    
	     
	 }
   
	private String toXiaoStr(String numStr)
	{
		String result = "";
		int num1 = numStr.charAt(0) - 48;
		result += hanArr[num1] + "角"; 
		int num2 = numStr.charAt(1) - 48;
		result += hanArr[num2] + "分"; 
		return result;
	}
	 public static void main(String[] args)   
	    {      
	        //等号左边的Num2Rmb是nr的变量类型,右边的Num2Rmb是构造器名   
		    num2rmb nr = new num2rmb();   
	        
		    Scanner scan = new Scanner(System.in);
		    System.out.println("请输入一个整数部分最多为12位的小数");
		    double sc=scan.nextDouble();
		    while(String.valueOf(Math.floor(sc)).length()>12)
		    {
		    	 System.out.print("输入错误,请重新输入:");
	             sc=scan.nextDouble();
		    }
		    
		    String[] all=nr.divide(sc);
		    String zhengpart=all[0];
		    String xiaopart=all[1];
		    
		    
	        //测试把一个12位以内的数字字符串变成汉字字符串   
	        System.out.println(nr.toHanStr(zhengpart)+" "+nr.toXiaoStr(xiaopart));   
	    }   
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值