`
magic_agate
  • 浏览: 105768 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

数字金额转换为中文金额

    博客分类:
  • java
阅读更多
/* 文档密级:秘密  */
package com.str;

import java.math.BigDecimal;


public class ChangeRMB{
	String strCash;
	int DotPos;
    
    public ChangeRMB(){
    }
    
    public void setCash(String cash){
        this.initRMB(cash);
    }
    
	public ChangeRMB(String Cash){
		this.initRMB(Cash);
	}

	private void initRMB(String Cash){
		if(Cash.equals("")){
			Cash = "0";
		}
		strCash = Cash;
		while(strCash.indexOf(",") >= 0){
			strCash = strCash.substring(0,strCash.indexOf(",")) + strCash.substring(strCash.indexOf(",") + 1,strCash.length());
		}
		strCash = (new BigDecimal(strCash)) + "";
		//得到小数点位置
		DotPos = strCash.indexOf("."); //返回小数点的开始位置
		if(DotPos == -1){
			DotPos = strCash.length(); //判断是否为整数
			//只取小数点后二位
		}
		if(DotPos < strCash.length() - 3){
			strCash = strCash.substring(0,strCash.indexOf(".") + 3);
		}
		if(DotPos == strCash.length() - 2){
			strCash = strCash + "0";
		}
	}

	public String getChnRMB(){
		String strRet = ""; //输出大写字符串变量
		boolean bFlag = true; //改变对'零'的判断条件变量
		boolean zFlag = true;
		int i;
		if(Double.parseDouble(strCash) == 0){
			return "零";
		}
		//先取小数点后的数
		for(i = DotPos + 1;i < strCash.length();i++){
			if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){
				strRet = strRet + GetNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetUnit(DotPos - i);
				zFlag = false;
			}

		}

		//最后位不为'角,分'
		if(DotPos == -1 || zFlag || DotPos == strCash.length() - 1){
			strRet += "整";
		}
		//取小数点前的数,i用作判断位置
		for(i = DotPos - 1;i >= 0;i--){
			if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){
				strRet = GetNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetUnit(DotPos - i) + strRet;
				bFlag = false;
			}
			else{
				if(!bFlag){
					strRet = "零" + strRet;
				}
				bFlag = true;
				if(DotPos > 8){
                                    //modified by NT 2003-02-26
                                    //if((DotPos - i == 5 && !strCash.substring(i - 4,i + 1).equals("00000")) ||
                                    if((DotPos - i == 5 && !strCash.substring(i,DotPos).equals("00000")) ||

					   (DotPos - i == 9) || (DotPos - i == 13)){
						strRet = GetUnit(DotPos - i) + strRet;
					}
				}
				else{
					if((DotPos - i == 5) || (DotPos - i == 9) || (DotPos - i == 13)){
						strRet = GetUnit(DotPos - i) + strRet;
					}
				}

				if(DotPos - i == 1){
					strRet = "元" + strRet;
				}
			}
		}
		if(strRet.indexOf("元") == 0){
			strRet = strRet.substring(1);
		}
		return strRet;
	}

	public String GetNumber(int nNum){
		String strRet = "";
		switch(nNum){
		case 0:
			strRet = "零";
			break;
		case 1:
			strRet = "壹";
			break;
		case 2:
			strRet = "贰";
			break;
		case 3:
			strRet = "叁";
			break;
		case 4:
			strRet = "肆";
			break;
		case 5:
			strRet = "伍";
			break;
		case 6:
			strRet = "陆";
			break;
		case 7:
			strRet = "柒";
			break;
		case 8:
			strRet = "捌";
			break;
		case 9:
			strRet = "玖";
			break;
		}
		return strRet;
	}

	private static String GetUnit(int nUnit){
		String strRet = "";
		switch(nUnit){
		case -2:
			strRet = "分";
			break;
		case -1:
			strRet = "角";
			break;
		case 1:
			strRet = "元";
			break;
		case 2:
			strRet = "拾";
			break;
		case 3:
			strRet = "佰";
			break;
		case 4:
			strRet = "仟";
			break;
		case 5:
			strRet = "万";
			break;
		case 6:
			strRet = "拾";
			break;
		case 7:
			strRet = "佰";
			break;
		case 8:
			strRet = "仟";
			break;
		case 9:
			strRet = "亿";
			break;
		case 10:
			strRet = "拾";
			break;
		case 11:
			strRet = "佰";
			break;
		case 12:
			strRet = "仟";
			break;
		case 13:
			strRet = "万";
			break;
		case 14:
			strRet = "拾";
			break;
		case 15:
			strRet = "佰";
			break;
		case 16:
			strRet = "仟";
			break;
		case 17:
			strRet = "万";
			break;

		}
		return strRet;
	}

	public String getEngRMB(){
		String strRet = ""; //输出大写字符串变量
		// boolean bFlag = true; //改变对'零'的判断条件变量
		boolean zFlag = true;
		int i;
		i = DotPos + 1;

		if(Double.parseDouble(strCash) == 0){
			return null;
		}

		//先取小数点后的数
		if(DotPos != strCash.length()){
			if(Integer.parseInt(strCash.substring(i)) >= 20){
				strRet = strRet + GetEngTwoNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngNumber(Integer.parseInt(strCash.substring(i + 1)));
				zFlag = false;
			}
			if(Integer.parseInt(strCash.substring(i)) < 20){
				if(Integer.parseInt(strCash.substring(i)) > 10){
					strRet = strRet + GetEngOneNumber(Integer.parseInt(strCash.substring(i + 1,i + 2)));
					zFlag = false;
				}
				else{
					if(Integer.parseInt(strCash.substring(i)) > 0){
						strRet = strRet + GetEngNumber(Integer.parseInt(strCash.substring(i + 1,i + 2)));
						zFlag = false;
					}
				}
			}
		}
		//最后位不为'角,分'
		if(DotPos == -1 || zFlag){
			strRet += " ONLY";
		}
		else{
			strRet = " POINT" + strRet;
		}
		//取小数点前的数,i用作判断位置
		for(i = DotPos - 1;i >= 0;i--){
			if(DotPos - i == 1 || DotPos - i == 4 || DotPos - i == 7 || DotPos - i == 10){
				if(i > 0){
					if(Integer.parseInt(strCash.substring(i - 1,i + 1)) >= 20){
						strRet = GetEngTwoNumber(Integer.parseInt(strCash.substring(i - 1,i))) + GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) +
								 strRet;
					}
					if(Integer.parseInt(strCash.substring(i - 1,i + 1)) < 20){
						if(Integer.parseInt(strCash.substring(i - 1,i + 1)) > 10){
							strRet = GetEngOneNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet;
						}
						else{
							if(Integer.parseInt(strCash.substring(i - 1,i + 1)) > 0){
								strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet;
							}
							if(DotPos - i == 7 && Integer.parseInt(strCash.substring(i - 1,i + 1)) == 0){
								strRet = GetEngUnit(DotPos - i) + strRet;
							}

							if(DotPos - i == 4 && DotPos < 7 && Integer.parseInt(strCash.substring(i - 1,i + 1)) == 0){
								strRet = GetEngUnit(DotPos - i) + strRet;
							}
						}
					}
				}
				else{
					strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet;
				}
			}

			if((DotPos - i == 3) || (DotPos - i == 6) || (DotPos - i == 9)){
				if(Integer.parseInt(strCash.substring(i,i + 1)) != 0){
					strRet = GetEngNumber(Integer.parseInt(strCash.substring(i,i + 1))) + GetEngUnit(DotPos - i) + strRet;
				}
			}

		}
		return strRet;
	}

	private String GetEngNumber(int nNum){
		String strRet = "";
		switch(nNum){
		case 0:
			strRet = " TEN";
			break;
		case 1:
			strRet = " ONE";
			break;
		case 2:
			strRet = " TWO";
			break;
		case 3:
			strRet = " THREE";
			break;
		case 4:
			strRet = " FOUR";
			break;
		case 5:
			strRet = " FIVE";
			break;
		case 6:
			strRet = " SIX";
			break;
		case 7:
			strRet = " SEVEN";
			break;
		case 8:
			strRet = " EGIHT";
			break;
		case 9:
			strRet = " NINE";
			break;

		}
		return strRet;
	}

	private String GetEngOneNumber(int nNum){
		String strRet = "";
		switch(nNum){
		case 1:
			strRet = " ELEVEN ";
			break;
		case 2:
			strRet = " TWELVE ";
			break;
		case 3:
			strRet = " THREETEEN ";
			break;
		case 4:
			strRet = " FOURTEEN ";
			break;
		case 5:
			strRet = " FIVTEEN ";
			break;
		case 6:
			strRet = " SIXTEEN ";
			break;
		case 7:
			strRet = " SEVENTEEN ";
			break;
		case 8:
			strRet = " EGIHTEEN ";
			break;
		case 9:
			strRet = " NINTEEN ";
			break;

		}
		return strRet;
	}

	private String GetEngTwoNumber(int nNum){
		String strRet = "";
		switch(nNum){
		case 2:
			strRet = " TWEENTY";
			break;
		case 3:
			strRet = " THIRTY";
			break;
		case 4:
			strRet = " FOURTY";
			break;
		case 5:
			strRet = " FIVTY";
			break;
		case 6:
			strRet = " SIXTY";
			break;
		case 7:
			strRet = " SEVENTY";
			break;
		case 8:
			strRet = " EGIHTY";
			break;
		case 9:
			strRet = " NINTY";
			break;
		}
		return strRet;
	}

	private static String GetEngUnit(int nUnit){
		String strRet = "";
		switch(nUnit){
		case 3:
			strRet = " HUNDRED";
			break;
		case 4:
			strRet = " THOUSAND";
			break;
		case 6:
			strRet = " HUNDRED";
			break;
		case 7:
			strRet = " MIllION";
			break;
		case 9:
			strRet = " HUNDRED";
			break;
		case 10:
			strRet = " BILLION";
			break;
		}
		return strRet;
	}

	public static void main(String[] args){
		ChangeRMB ChangeRMB1 = new ChangeRMB("103050020");
		System.out.println(ChangeRMB1.getChnRMB());
	}
}
分享到:
评论

相关推荐

    将数字金额转换为中文大写金额

    将数字金额转换为中文大写金额将数字金额转换为中文大写金额将数字金额转换为中文大写金额

    C# - 阿拉伯数字金额转换为繁体数字金额

    这个特定的项目“C# - 阿拉伯数字金额转换为繁体数字金额”专注于一个常见的财务处理任务,即把通常用阿拉伯数字表示的货币金额转化为繁体中文的表示方式。这在中文环境中特别有用,因为繁体数字在正式的商业文档和...

    数字金额转换为中文汉字金额(plsql function)

    数字金额转换为中文汉字金额:例如select num_to_zhs(123456789.54321) from dual; 我们调用该function可以将金额"123456789.54321"转换为“壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元伍角肆分叁贰壹”。

    金额转换,中文金额转数字金额,数字金额转中文金额

    金额转换,中文金额转数字金额,数字金额转中文金额,中文金额转数字金额从字符串中获取中文大写金额或是数字金额,不支持小数,中文金额不支持混写,如 五千零壹十万元,不支持转换会输出0,字符串可以不用截取,...

    Asp.net C# 数字货币金额转换为中英文金额写法

    总的来说,这个资源提供了一个实用的工具,帮助开发者快速将数字金额转换为符合规范的中英文格式,这对于处理金融数据、制作财务报表等场景非常有价值。通过学习和理解这些方法,开发者可以更好地应对实际工作中遇到...

    将阿拉伯数字转换为汉字数字或者汉字大写金额

    1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...

    javascript数字金额转换为中文大写金额

    ### JavaScript 数字金额转换为中文大写金额 在日常财务处理、银行交易或是发票开具等场景中,将数字金额转换成中文大写金额是一项常见的需求。这种转换不仅可以提高正式文档的专业性,还能避免因数字易被篡改而...

    将阿拉伯数字金额转换为中国传统形式人民币值

    自己写的将阿拉伯数字金额转换为中国传统形式人民币值的小程序,亲测可用!

    这是一个可以将阿拉伯数字金额转换为中文大写金额的类,vb.net可用

    这是一个可以将阿拉伯数字金额转换为中文大写金额的类,vb.net可用

    阿拉伯数字金额转换为大写数字金额

    这样,我们就可以通过调用JavaBean的`toChinese()`方法,将任何阿拉伯数字金额转换为大写汉字表示。 在实际应用中,这个功能可能需要处理更复杂的情况,比如负数、零、以及千位分隔符等。可以进一步扩展`...

    java 正则数字金额转换为大写

    输入字符,通过正则验证是否为金额不超过万亿精确到小数点后两位,然后将数字转换为大写 包括后台java正则验证及前台js验证 请输入一个数字(精确到小数点后两位): fdsa54325.54 fdsa54325.54 false 请输入一个...

    金额大写_数字金额转换_

    在IT行业中,尤其是在财务软件和电子商务系统开发中,将数字金额转换为汉字大写是一种常见的需求。这主要是因为在中国的财务规范中,正式的财务单据(如发票、支票等)上的金额通常需要以汉字大写的形式表示,以防止...

    oracle 数字金额转为汉字大写

    在Oracle数据库环境中,有时我们需要将数字金额转换成汉字大写形式,这在财务报表或理财程序中尤为常见,因为汉字大写是财务领域的一种标准表示方式,可以避免因数字混淆而引发的错误。本篇文章将深入探讨如何在...

    数字金额转换成中文金额的js

    数字金额转换成中文金额的js,希望给大家带来帮助

    金额阿拉伯数字转换中文大写(全)

    在IT领域,尤其是在财务软件开发或数据处理中,经常需要将阿拉伯数字金额转换为中文大写,以便在财务报表、发票或合同中清晰准确地表示金额。这是因为中文大写数字在金融交易中能减少因书写错误导致的混淆,增强财务...

    数字金额转换为大写汉字

    读入一个浮点数值,转换为金额大写。整数只显示整数部分。含连续0只输出一个“零”。整圆显示“整”。

    一个将数字金额转换为中文大写金额的SAP程序

    总的来说,这个SAP程序FUNCTION z_rmbdx提供了一种有效的方法,将SAP系统中的数字金额转换为符合中文书写习惯的大写形式,这对于财务报表的编制和审核至关重要。它通过自定义的数据结构和逻辑判断,实现了对不同数量...

    C#数字金额转换为大写中文金额

    ### C# 数字金额转换为大写中文金额 在日常财务处理、银行系统以及各种商业应用中,将数字金额转换成大写中文金额是一项非常实用的功能。这种转换主要用于正式文件中的金额表示,如发票、支票等,可以有效防止金额...

    关于数字金额转换为¥的问题

    要将数字金额转换为中文¥格式,我们可以使用JavaScript的内置函数和字符串方法。以下是一些关键知识点: 1. **Number.toFixed()**:这个方法可以用来将数字转换为带有指定位数小数的字符串。例如,`1234.567....

Global site tag (gtag.js) - Google Analytics