疯狂java讲义 第四章 01人民币的转换读法小程序

本文介绍了一个程序,用于将浮点数转换为人民币的读法字符串,包括处理整数部分、小数部分以及特殊字符如零的处理规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.程序说明:将一个浮点数转换成人命币的读法字符串


2.程序流程介绍以及注意事项

流程:

*接收用户输入的一个double数值

*将这个double数值进行处理,得到整数部分和小数部分

*分别对整数部分和小数部分进行处理

*合并整数和小数字符串结果,输出结果,结束。


注意事项:

利用math.round()四舍五入

利用string.tochar()转换字符串数组

主要解决问题

字符串中零的处理,将它分为两种情况

(1)首位是否为0

不处理,一般输入的数值的首位不为0

(2)末尾的0

直接不翻译

(3)中间的单个0和连续出现的0的处理

我们每次处理4位数字,分首部的最前4位和另外的中间以及末尾4位

a.首部4位:中间单个0译为零;连续的0译为一个零,末尾的0不需要翻译

?100,连续的0到末尾的话应该也是不翻译的。

b.其他的4位:目前应该跟a.情况一样

c.全部为0的处理

翻译为零元

(5)整数和小数部分都为0的情况

(4)对于超大位数的数值进行怎样处理

目前默认处理12位

(5)根据单元的不同将数值分成每4位进行处理

1-4 单位 元

5-8 万

9-12 亿



*代码


import java.util.Scanner; 

import com.sun.corba.se.spi.extension.ZeroPortPolicy;
import com.sun.xml.internal.ws.api.streaming.XMLStreamReaderFactory.Zephyr;

public class Num2Rmb
{
	private double digitalValue;
	private boolean zero;

	String[] strHan = {"零", "壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	String[] moneyCount = {"","拾","佰","仟"};
        String[] moneyUnit = {"元","万","亿"}; 	
        //the default constructer	
	Num2Rmb()
	{
		digitalValue = 0.0;
		zero = false;
	}
	//the definite constructed with the @param
	Num2Rmb(double digitalRmbValue,boolean flag)
	{
		digitalValue = digitalRmbValue;
		zero = flag;
	}
	//divide the digital value into the integer part and decimal part
	//return the array of String[] 
	//string[0] is the integer part 
	//string[1] is the decimal part
	
	private String[] divide(double digitalRmbValue)
	{
		//get the integer part of the digital money
		long intPart = (long)(digitalRmbValue);
		//get the decimal part of the digital money
		long decimalPart = Math.round((digitalRmbValue - intPart)*100);
		//another method use Integer.toString(int a)
		//if the decimal part is equal to 0, then we will give 0 to the string
		String strIntPart = "";
		String strDecimalPart = "";
		if(intPart == 0)
			strIntPart = "0";
		else {
			strIntPart = ""+ intPart;
		}
		
		if(decimalPart<10 && decimalPart >= 0)
			strDecimalPart = "0" +decimalPart;
		else {
			strDecimalPart = "" + decimalPart;
		}
		if (intPart==0 && decimalPart == 0) {
			zero = true;
			
		}
			
		return new String[] {strIntPart,strDecimalPart };

	}
	//process the basic unit string with at most 12 characters
	private String proDecimalRmb(String str)
	{
		String strResult;
        char[] strRmb = new char[20];
        strRmb = str.toCharArray();
		if(strRmb[0]== '0' && strRmb[1] == '0')
		{
			strResult = "";
		}
		else
		{
			int m = strRmb[0] - '0';
			int n = strRmb[1] - '0';
			strResult = strHan[m]+"角"+ strHan[n]+"分";
		}
		return strResult;

	
	}
	//process the 4 first bit number as the form:{"456"}
	//the first kind situation
	private String proFirstFourBit(String str)
	{
		char[] firstFourBitRmb = new char[20];
		firstFourBitRmb = str.toCharArray();
                int len = firstFourBitRmb.length;
		String strResult = "";
		for(int i = 0; i < len; i++)
		{
			//the first zero
			//if the last bit is 0 , we process it
			if(firstFourBitRmb[i] == '0'&& i < len)
			
			{

			    boolean zeroFlag = false;
			    //这个while循环表达式可能会发生错误,指针越界访问,注意表达式语句的顺序
				while(i<len && firstFourBitRmb[i] =='0' )
			
				{
			       
				      zeroFlag = true;
					i++;

				}
				if(i != len && zeroFlag ==  true )
					strResult += "零";
			
				i--;
			}

			//if non-zero bit
		        else
			{		
                        
				int m = firstFourBitRmb[i] - '0';
		        strResult += strHan[m] + moneyCount[len-i-1];
			//the following
			}

		} //end for
                   
          
			return strResult;

	}//proFirstFourBit()
	
        //process the middle or the last four bit situation
	/*private String proSecondFourBit(String str)
	{
          // 
	       int i =0;
	       String strResult= "";
           char[] secondFourBitRmb = new char[20];
           secondFourBitRmb = str.toCharArray();
           int len = secondFourBitRmb.length;
	       for(i=0; i< secondFourBitRmb.length; i++)
	       {

			if(secondFourBitRmb[i] == '0')
			
			{

			        boolean zeroFlag = false;
				while(secondFourBitRmb[i] =='0'&& i< len)
			
			
				{
			       
					if(zeroFlag == false)	
			       
					{
				       
						zeroFlag = true;
				
				       
						strResult += "零";
			      
				       	}
			      
					i++;

			
				}
			
				i--;
			}

			//if non-zero bit
		        else
			{		
                        
				int m = secondFourBitRmb[i] - '0';
		        	strResult += strHan[m] + moneyCount[len-i-1];
			//the following
			}

		} //end for
                   
	       return strResult;

 	}//proSecondFourBit()
*/       public static void main(String[] args)
       {
	       String strIndicator = "begin to test the digital RMB";
	       System.out.println(strIndicator);
	       System.out.println("please input the digital money:");
	       String strTestRmb = "2356.782";
	       String[] strTempRmb = new String[2];
	       double strValue = 0D;
	       
	       Scanner sc = new Scanner(System.in);
	       strValue = sc.nextDouble();
           Num2Rmb nr = new Num2Rmb();

	       //divide the digital Rmb
	       strTempRmb = nr.divide(strValue);
           //process the decimal ditial money
	       String result1 =nr.proDecimalRmb(strTempRmb[1]);

	       //process the interger part money
	       String result2="";

	       int len = strTempRmb[0].length();
	       if(len >12)
		       System.out.println("the data you input is too large to translate");
	       else
	       {
		       if(len>=9)
		       {
			       String strBit1 = strTempRmb[0].substring(0,len-8);
			       String strBit2 = strTempRmb[0].substring(len-8,len-4);
			       String strBit3 = strTempRmb[0].substring(len-4,len);
			       String strResult1 = nr.proFirstFourBit(strBit1)+"亿";
			       String strResult2 = nr.proFirstFourBit(strBit2)+"万";
			       String strResult3 = nr.proFirstFourBit(strBit3)+"元";
                               result2 = strResult1 + strResult2 +strResult3;

		       }
		       else
			       if(len>=5)
			       { 

			       String strBit1 = strTempRmb[0].substring(0,len-4);
			       String strBit2 = strTempRmb[0].substring(len-4,len);
			       String strResult1 = nr.proFirstFourBit(strBit1)+"万";
			       String strResult2 = nr.proFirstFourBit(strBit2)+"元";
                               result2 = strResult1 + strResult2;
			       }
			       else
				       if(len>=1)			
				       {
				    	   if (nr.zero == true) 
				    	   {
				    		   result2 ="零元";
							
						  }
				    	  else
					       result2 = nr.proFirstFourBit(strTempRmb[0])+"元";
				       }
	       System.out.println("translate the form of the money is:");
	       System.out.println(result2+result1);
	      }

       }//main()

}







//这个while循环表达式可能会发生错误,指针越界访问,注意表达式语句的顺序
while(firstFourBitRmb[i] =='0'&& i<len)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值