Javaウィジェット——浮動小数点数を人民元読み方文字列に変換

6894 ワード

弟はJavaを初めて勉強して、浮動小数点数を人民元の読み方文字列に変えるプログラムを書いたばかりです.このプログラムのjavaソースファイルコードは以下の通りです.

import java.util.*;

public class Num2Rmb
{
	private String[] hanArr= {" " , " " , " " , " " , " " , 
		" " , " " , " " , " " , " "};
    private String[] unitArr = {" ", " ", " "};

	/**
	 *                      
	 * @param num          
	 * @return                    。            ,            。
	 */
	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)};						
    }

	/**
	 *    12                
	 * @param numStr            
	 * @return                。
	 */
	
	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;
        String resultFirst = "";
		String resultSecond = "";
		String resultThird = "";
		
		//             
        for (int i = 0 ; i < partNum ; i ++ )
		{	
			//     
			if (i == 0)	
            {	
				//    String  substring        [beginIndex, endIndex),
				// :      ,       。
				String firstPart = numStr.substring(0, firstPartLen);
				//              
		        for (int j = 0 ; j < firstPartLen ; j ++ )
		       {					   
			       //String  charAt(int index),            。(     )。
			       // char       int   ,     ASCII      48;			
			       //   char     48  int   ,  '4'    4。
			       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];
			       }
				   //             0,              0,         
				   else if (j == 2 && num == 0 && firstPart.charAt(1) - 48 == 0
					        && firstPart.charAt(0) - 48 != 0
					        && firstPart.charAt(firstPartLen - 1) - 48 != 0)
				   {
					   resultFirst += hanArr[num];
				   }
				   //     hanArr unitArr          
		       }  
			}
			//     
			else if (i == 1)
			{	
				String secondPart = numStr.substring(firstPartLen, (firstPartLen + 4));
				int secPartLen = secondPart.length();				
		        for (int k = 0 ; k < secPartLen ; k ++ )
		       {	
			       int num = secondPart.charAt(k) - 48;			       
			       if (k != secPartLen-1 && num != 0)					   
			       {
				       resultSecond += hanArr[num] + unitArr[secPartLen - 2 - k];         
			       } 
                   else if (k == secPartLen - 1 && num != 0)			  
                   {
				       resultSecond += hanArr[num];
			       }
				   else if (k == 2 && num == 0 && secondPart.charAt(1) - 48 == 0 
					        && secondPart.charAt(secPartLen - 1) - 48 != 0)
				   {
					   resultSecond += hanArr[num];
				   }				  
		       }
			    //        0,           ,         。
				//Integer  parseInt(String s)  :                      。
			    if (Integer.parseInt(secondPart) == 0 && partNum == 3)
			   {					
					resultSecond = hanArr[0];
			   }			   
			}
			//     
			else if (i == 2)
			{	
				String thirdPart = numStr.substring((firstPartLen + 4), strLen);
				int thirdPartLen = thirdPart.length();
		        for (i = 0 ; i < thirdPartLen ; i ++ )
		       {	
			       int num = thirdPart.charAt(i) - 48;			      
			       if (i != thirdPartLen-1 && num != 0)
			       {
				       resultThird += hanArr[num] + unitArr[thirdPartLen - 2 - i];         
			       } 
                   else if (i == thirdPartLen - 1 && num != 0)
                   {
				       resultThird += hanArr[num];
			       }
				   else if (i == 2 && num == 0 && thirdPart.charAt(1) - 48 == 0 
					        && thirdPart.charAt(thirdPartLen - 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)
		{   
			
			result = resultFirst + " " + " " + resultSecond + " " + " " + resultThird+ " ";
			//            0			
			if (Integer.parseInt(numStr.substring(firstPartLen, (firstPartLen + 4))) == 0 
				&& Integer.parseInt(numStr.substring((firstPartLen + 4), strLen)) == 0)
			{
				result = resultFirst + " ";
			}			
		}   
		return result;		
	}
   
    public static void main(String[] args)
    {   
		//     Num2Rmb nr     ,   Num2Rmb     
		Num2Rmb nr = new Num2Rmb();
		//        236711125.123            
		System.out.println(Arrays.toString(nr.divide(236711125.123)));
		//     12                
		System.out.println(nr.toHanStr("123456789123"));
    }
}