java 小写金额转大写(八位)

看了网上好多人使用面向对象写的,其实面向过程的方法也挺好,就是需要讨论,然后模拟一下 就能,我只写了到亿位的。
下面是代码,要理解的话可看注释

import java.util.Scanner;

public class Main {
	   public static char []l1=new char[]{'零','壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾'};
	   public static char []l2=new char[]{'分','角','元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿'};
	   public static char l3='整';
       public static void main(String []args) {
	   Scanner sc=new Scanner(System.in);
	   String str=sc.next();//输进字符串类型的数
	   char []b=new char[18];
	   int []a=new int[18];
	   int j=0;
	   int flag=0;
	   int flag1=0;
       int flag2=0;
	   for(int i=0;i<str.length();i++)//转到字符类型的
		   b=str.toCharArray();
	   for(int i=str.length()-1;i>=0;i--)//转成十进制类型的
		   if(b[i]!='.'){
			   a[j]=(int)(b[i]-48);
			   j++;
		   }
	   //System.out.printf("%d\n",j-1);
	   for(int i=j-1;i>=2;i--)//遍历,直到元,对分和角 特判
	   {
		 if(a[i]!=0)//对于整数部分,若不为零的时候讨论一下
		 {
			 flag=1;
			 if(a[i]!=1)//对于1要特判,在为4或8时,不用输出1
				 System.out.printf("%c",l1[a[i]]);
			 else//4/8不用输出1
				if(j!=4&&j!=8)
			    System.out.printf("%c",l1[a[i]]);
		 }
		 else//当整数部分为零时,讨论
		 {
			 if(j-1!=i)//首位为零不输出
				 if(a[i]==0&&a[i-1]!=0)//遇见多个零,在最后一个输出
				 System.out.printf("%c",l1[a[i]]);
		 }
		 //对单位输出,注意拾,万,亿。
		 if(flag==1&&i==2)//只要前面不为零
			   System.out.printf("元");
		 if(i>=3&&i<=5)//区间判断2--5位
		 {
			 if(a[i]!=0)
				 System.out.printf("%c",l2[i]);
		 }
		
		 if(i>5&&i<=9)//区间判断6--9位
		 {
			 if(a[i]!=0) {
				 flag1=1;
				 if(i!=6)
				 System.out.printf("%c",l2[i]);
			 }
		  }
		  if(flag1==1&&i==6)//只有在此区间内不为零时,才能输出
			 System.out.printf("%c",l2[i]);
		 if(i>=10)//区间判断大于等于10位
		 {
			 if(a[i]!=0) {
				 flag2=1;
				 if(i!=10)
				 System.out.printf("%c",l2[i]);
			 }
		 }
		 if(i==10&&flag2==1)//只有在以上区间不为零时,才能输出
			 System.out.printf("%c",l2[i]);
	   }
	   //对角,分特别判断!
	   if(a[0]==0&&a[1]==0)
		   System.out.printf("%c",l3);
	   else if(a[0]==0&&a[1]!=0)
		   System.out.printf("%c%c",l1[a[1]],l2[1]);
	   else if(a[0]!=0&&a[1]==0)//0.03和1.03的区别
	   {
	       if(flag==1)
		   System.out.printf("%c%c%c",l1[a[1]],l1[a[0]],l2[0]); 
		   else
		   System.out.printf("%c%c",l1[a[0]],l2[0]);  
		   }
	   else
		   System.out.printf("%c%c%c%c",l1[a[1]],l2[1],l1[a[0]],l2[0]);
       }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值