`
herryhaixiao
  • 浏览: 90116 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

金额换算(数字换汉字)

    博客分类:
  • java
 
阅读更多
/**
 * 金额数据中文格式化工具类
 * 
 * @since version1.0
 */
public class MoneyToChinese {

	public MoneyToChinese() {
		super();
	}

	private final static String HanDigiStr[] = new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆",
			"柒", "捌", "玖" };

	private final static String HanDiviStr[] = new String[] { "", "拾", "佰", "仟", "万", "拾", "佰", "仟",
			"亿", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "万",
			"拾", "佰", "仟" };

	/**
	 * 将数字转为大写的汉字表示形式
	 * 
	 * @param String NumStr
	 * @return String
	 */
	public static String PositiveIntegerToHanStr(String NumStr) { // 输入字符串必须正整数,只允许前置空格(必须右对齐),不宜有前置零
		String RMBStr = "";
		boolean lastzero = false;
		boolean hasvalue = false; // 亿、万进位前有数值标记
		int len, n;
		len = NumStr.length();
		if (len > 15)
			return "数值过大!";
		for (int i = len - 1; i >= 0; i--) {
			if (NumStr.charAt(len - i - 1) == ' ')
				continue;
			n = NumStr.charAt(len - i - 1) - '0';
			if (n < 0 || n > 9)
				return "输入含非数字字符!";

			if (n != 0) {
				if (lastzero)
					RMBStr += HanDigiStr[0]; // 若干零后若跟非零值,只显示一个零
				// 如十进位前有零也不发壹音用此行
				if (!(n == 1 && (i % 4) == 1 && i == len - 1)) // 十进位处于第一位不发壹音
					RMBStr += HanDigiStr[n];
				RMBStr += HanDiviStr[i]; // 非零值后加进位,个位为空
				hasvalue = true; // 置万进位前有值标记

			} else {
				if ((i % 8) == 0 || ((i % 8) == 4 && hasvalue)) // 亿万之间必须有非零值方显示万
					RMBStr += HanDiviStr[i]; // “亿”或“万”
			}
			if (i % 8 == 0)
				hasvalue = false; // 万进位前有值标记逢亿复位
			lastzero = (n == 0) && (i % 4 != 0);
		}

		if (RMBStr.length() == 0)
			return HanDigiStr[0]; // 输入空字符或"0",返回"零"
		return RMBStr;
	}

	/**
	 * 将浮点型数值转为人民币的表示方式(前面带¥)
	 * 
	 * @param double val(传入的数值)
	 * @return String(转化后的人民币数值表示方式字符串)
	 */
	public static String NumToRMBStr(double val) {
		String SignStr = "";
		String TailStr = "";
		long fraction, integer;
		int jiao, fen;

		if (val < 0) {
			val = -val;
			SignStr = "负";
		}
		if (val > 99999999999999.999 || val < -99999999999999.999)
			return "数值位数过大!";
		// 四舍五入到分
		long temp = Math.round(val * 100);
		integer = temp / 100;
		fraction = temp % 100;
		jiao = (int) fraction / 10;
		fen = (int) fraction % 10;
		if (jiao == 0 && fen == 0) {
			TailStr = "整";
		} else {
			TailStr = HanDigiStr[jiao];
			if (jiao != 0)
				TailStr += "角";
			if (integer == 0 && jiao == 0) // 零元后不写零几分
				TailStr = "";
			if (fen != 0)
				TailStr += HanDigiStr[fen] + "分";
		}

		// 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分”
		// if( !integer ) return SignStr+TailStr;

		return "¥" + SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
				+ "圆" + TailStr;
	}

	/**
	 * 将浮点型数值转为人民币的表示方式
	 * 
	 * @param double val(传入的数值)
	 * @return String(转化后的人民币数值表示方式字符串)
	 */
	public static String NumToCNMoney(double val) {
		String SignStr = "";
		String TailStr = "";
		long fraction, integer;
		int jiao, fen;

		if (val < 0) {
			val = -val;
			SignStr = "负";
		}
		if (val > 99999999999999.999 || val < -99999999999999.999)
			return "数值位数过大!";
		// 四舍五入到分
		long temp = Math.round(val * 100);
		integer = temp / 100;
		fraction = temp % 100;
		jiao = (int) fraction / 10;
		fen = (int) fraction % 10;
		if (jiao == 0 && fen == 0) {
			TailStr = "整";
		} else {
			TailStr = HanDigiStr[jiao];
			if (jiao != 0)
				TailStr += "角";
			if (integer == 0 && jiao == 0) // 零元后不写零几分
				TailStr = "";
			if (fen != 0)
				TailStr += HanDigiStr[fen] + "分";
		}

		// 下一行可用于非正规金融场合,0.03只显示“叁分”而不是“零元叁分”
		// if( !integer ) return SignStr+TailStr;

		return SignStr + PositiveIntegerToHanStr(String.valueOf(integer))
				+ "圆" + TailStr;
	}
	
	public static void main(String[] args) {
		String amount = MoneyToChinese.NumToCNMoney(456465145);
		System.out.println(amount);
		String rmb = MoneyToChinese.NumToRMBStr(8754);
		System.out.println(rmb);
	}
}

 

分享到:
评论

相关推荐

    数字转换成金额大写

    在IT行业中,尤其是在财务软件开发或者自动化报表系统中,经常需要将数字转换成中文大写的金额形式,以便符合中国的财务规范。"数字转换成金额大写"是一个常见的需求,特别是在Delphi这样的编程环境中。Delphi是一款...

    人民币大写金额转数字源码

    在中文环境下,人民币的大写金额是法定的金融表述方式,用于避免数字混淆和欺诈。本文将详细讲解如何实现“人民币大写金额转数字”的算法,主要基于C#编程语言。 首先,我们需要了解人民币大写金额的基本规则。...

    金额大小写换算.

    这个"金额大小写换算.exe"很可能是一个简单的命令行程序或桌面应用,用户输入数字后,它会按照上述规则自动生成对应的中文大写金额。可能的使用方式是用户输入数字或者直接粘贴数值,点击转换按钮,程序就会即时显示...

    mysql函数,将数字金额转成人民币大写

    将数字金额转成人民币大写,如1999.00,转为:壹仟玖佰玖拾玖元整;2000.00,转为:贰仟元整;2000.01,转为:贰仟元零壹分

    C#中将数字金额转化为大写金额

    return "数字太大,无法换算,请输入一万亿元以下的金额"; ``` ##### 数字到汉字的映射 - **ConvertData 方法**:此方法用于将整数部分转换为汉字。首先判断数字长度,根据长度的不同采用不同的处理方式。对于...

    JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码

    它能够有效地将输入的阿拉伯数字金额转换为符合规范的中文大写金额,从而满足财务应用的需求。在实际项目中,这样的函数可以作为工具函数,与其他业务逻辑配合使用,提高代码的可读性和可维护性。

    excel金额大小写转换.rar

    在Excel中进行金额大小写的转换是一项常见的财务处理任务,尤其对于需要出具规范的财务报表或者银行凭证时,正确地将数字格式转化为大写汉字是非常重要的。这个“excel金额大小写转换.rar”压缩包可能包含了一个或多...

    C#用于金额的数字大小写转换器

    C#数字大小写转换器,适用于金额行业,主要是数组的应用,将数字转换为中文数组,为数字位数建立一个位数组,为数字单位建立一个单位数组 ,比如",万,", ",亿,", ",万亿,",外层循环,四位一组,每组最后加上单位: ",...

    数值转换成大写金额运算

    在记账时,我们经常用大写汉字代替数字进行记账,而我们在数值运算时往往是采用的阿拉伯数字进行的计算,这时我们就需要用到将阿拉伯数值转换成大写金额的数值转换工具,而这篇代码讲的就是这种数值换算运算.

    javascript版数字转化为中文传统的数字写法

    此外,文件名`ConverRMB.htm`可能暗示了这个功能可能用于处理人民币金额的显示,那么在处理时还需要考虑到中文数字中的特殊规则,比如“元”、“角”、“分”等单位的使用。 总之,JavaScript实现数字到中文传统...

    金额小写自动转化为大写

    在IT行业中,尤其是在软件开发领域,经常会遇到各种各样的需求,其中之一就是将金额数字转换为中文大写形式。这样的功能对于会计系统或者金融应用来说至关重要,因为它能够保证金额表示的清晰性和准确性,防止因数字...

    人民币单位转换练习.pdf

    2. 数值的表示和转换:人民币的数值可以使用数字和汉字两种形式来表示,例如100元可以写为“一百元”或“100Y”。在进行金额核算时,必须将所有的数值都转换成统一的单位进行计算,比如统一转换为“分”计算。 3. ...

    小学奥数题目-一年级-应用题类-认识人民币知识点习题.pdf

    1. **认识人民币**:人民币分为纸币和硬币两种形式,纸币上的数字和汉字共同表示面额。例如,10元的纸币上有数字"10"和汉字"元"。人民币的基本单位是元,次级单位是角和分,1元等于10角,1角等于10分。 2. **货币...

    女声语音计算器 好用 功能多

    在财务或商务活动中,经常需要将数字金额从阿拉伯数字形式转换成汉字大写,以符合财务规范。女声语音计算器内置了这一功能,可以直接将输入的小写数字转化为规范的汉字大写,极大地提高了工作效率,减少了手动转换...

    一年级下册认识人民币元角分1PPT学习教案.pptx

    数字代表金额,汉字则表明货币的面值。例如,“壹圆”代表1元,“贰角”代表2角,“叁分”代表3分。 3. **人民币的分类**: - 硬币:包括1分、2分、5分、1角、2角和5角硬币。 - 纸币:通常有1元、2元、5元、10元...

    一年级下册认识人民币-元角分学习教案.pptx

    7. **人民币的计算与换算**:教案中包含了一些简单的数学练习,例如将分或角转换为元,或者通过组合不同面值的硬币达到特定金额,如付1元钱的不同方式。这些练习旨在培养学生的实际操作能力和数学思维。 8. **商品...

    《认识人民币》教学案例.doc

    2. **人民币的面值识别**:识别人民币的关键在于查看数字和数字后面的汉字,数字代表金额,汉字则确定货币的单位,如“元”、“角”和“分”。 3. **人民币的分类**:人民币可以按照面值大小进行分类,如1元以下的...

    一年级下《认识人民币》公开课教案.pdf

    接着,教师通过对比不同颜色、图案和数字,让学生学会通过数字和汉字来识别人民币,同时指出20元、50元、100元以及1角、5角、1元等不同面额的纸币和硬币,以及已较少使用的1分、2分、5分硬币。 在教学过程中,教师...

    一年级下册认识人民币-元角分PPT课件.pptx

    在教学过程中,学生需要学习如何辨认不同面值的人民币,这主要依赖于识别数字和汉字。例如,1元、5角、1分的硬币,以及各种面额的纸币。 人民币的单位包括元、角、分,其中元是最大的单位,1元等于10角,而1角又...

    二年级数学口诀歌PPT课件.pptx

    - 注意数字和汉字的结合,数字看边角,汉字看圆角分。 - 1元等于10角,1角等于10分。 - 找零和比较价格差异时使用减法,不同单位的货币需先转换单位再进行计算。 以上是二年级数学口诀歌PPT课件中的主要内容,...

Global site tag (gtag.js) - Google Analytics