将浮点数转化为人民币读法字符串

import java.util.Arrays;

class  Num2Rmb
{
	private String [] hanArr=new String[]{"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	private String [] unitArr=new String[]{"十","百","千"};
		/**
	把一个浮点数转化为整数部分和小数部分,小数部分保留2位
	@param num 需要分割的浮点数
	@return 分解出来的整数和小数,分别放在数组的第一位和第二位
	*/
	private String[] divide(double num)
	{
		long zheng=(long)num;
		long xiao=Math.round((num-zheng)*100);
		return new String[]{zheng+"",String.valueOf(xiao/10),String.valueOf(xiao%10)};
	}
	/**
	把一个四位数的数字字符串转化为汉字字符串
	@param num 所给出的四位数的数字字符串
	@return 四位数的数字字符串所转化成的汉字字符串
	*/
	public String ToHanStr(String numStr)
	{
		String result="";
		int len=numStr.length();
		for(int i=0;i<len;i++)
		{
			//数字1和字符‘1’相差48
			int num=numStr.charAt(i)-48;
			//若不为0且不为最后一个数
			if(i!=len-1&&num!=0)
			{
				result+=hanArr[num]+unitArr[len-2-i];
			}
			//否则不加单位
			else{
				result+=hanArr[num];
			}

		}
		return result;
	}
	/*
	 * 将特定的数字转化为多个长度为4的数组
	 */
	private String[] ToLaw(String number)
	{
		int x=(int)number.length()/4;
		String []a=new String[x+1];
		for(int i=0;i<a.length;i++)
		{
			a[i]="";
		}
		for(int i=0;i<number.length();i++)
		{
			a[(i/4)]+=number.charAt(i);
		}
		return a;
	}
	/*
	 * 将一个数字合法的转化为人民币的形式
	 */
	
	public void PrintAsRmb(double num)
	{
		String[] y={"",""};
		y=divide(num);
		String numStr=y[0];
		String []x=new String[(int)numStr.length()/4+1];
			x=ToLaw(numStr);
		for(int i=0;i<x.length;i++)
		{
			System.out.print(ToHanStr(x[i]));
			if(x.length==3)
			{
				if(i==0)
					System.out.print("亿");
				else if(i==1)
					System.out.print("万");
			}
			if(x.length==2)
			{
				if(i==0)
					System.out.print("万");
			}
		}
		System.out.print("元");
		System.out.print(ToHanStr(y[1])+"角");
		System.out.print(ToHanStr(y[2])+"分");
	}
	
	public static void main(String[] args) 
	{
		Num2Rmb a=new Num2Rmb();
	/*
		System.out.println(Arrays.toString(a.divide(43252344.3242)));
		System.out.println(a.ToHanStr("5109"));
		String x[]=a.ToLaw("435432");
	*/
		a.PrintAsRmb(33543345543.23);
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值