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

金额数据中文格式化

阅读更多

共享一个数字金额换算成大写金额的工具类。这在互联网金融项目中是很常见的换算。

 

 

/** 
 * MoneyToChinese.java
 * create on 2011-01-01
 */

/**
 * 金额数据中文格式化工具类
 * 
 * @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;
	}
}

 

分享到:
评论

相关推荐

    jquery格式化大写金额组件

    **jQuery格式化大写金额...以上就是关于“jQuery格式化大写金额组件”的主要介绍,这个组件通过简单的API接口,让开发者能够在项目中轻松实现金融数据的中文大写展示,提升了用户体验,同时确保了财务数据的严谨性。

    DataGridView财务金额格式显示

    通过设置列的样式、自定义格式化方法、监听事件以及数据验证,我们可以确保金额数据在显示和编辑时都符合财务规范。以上所述的步骤和技巧将帮助你更好地实现`DataGridView`中的财务金额格式化,提高应用的专业性和...

    用正则表达式检验日期,身份证,金额,邮箱,格式化日期,转换金额格式

    将小写金额转换为大写,主要涉及到数字与汉字之间的映射。 #### 5.2 示例代码 下面是一个简单实现该功能的示例函数: ```javascript function convertMoneyToChinese(money) { const digits = ['零', '壹', '贰', ...

    数字金额转汉字

    3. 验证和格式化:转换后的汉字金额应进行验证,确保符合中文金额书写规范,例如整数部分不能缺少“元”字,小数部分不能有额外的零。 4. 大额单位:对于较大的金额,还需要考虑“万”、“亿”等大单位的转换。 总...

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

    中文金额通常以大写汉字表示,如“壹”、“贰”等,而英文金额则遵循特定的语法结构,如"$1,234.56"。转换过程涉及对数字进行拆分、映射和组合。 1. **字符串映射法**:这是最直观的方法,通过创建一个包含数字与...

    js实现格式化金额,字符,时间的方法

    在这篇文章中,作者主要介绍了如何使用JavaScript实现金额、字符和时间的格式化处理。以下是对文章中提及的方法的详细解读。 ### 金额格式化 文章首先介绍了将数字金额转换成中文大写金额的方法,这对于编写财务...

    金额小写转汉字大写最好的方法

    1. **优化数字格式化**:采用更精确的数字转换函数,或者在转换前对数字进行适当调整,以避免因双精度浮点数的有限精度而导致的误差。 2. **完善特殊情况处理**:对于“一十”这类特殊情况,可以通过更细致的逻辑...

    VC++金额编辑框

    这种控件通常具有格式化功能,能够确保用户输入的金额符合标准的格式,例如“XX.XX”,并且能进行大小写的转换,以满足财务报表或银行系统中的规范需求。 1. **自定义编辑框控件** 在VC++中,如果系统默认的编辑框...

    oracle金额转换

    在Oracle数据库中,处理金融数据时,我们经常需要对金额进行格式化,使其符合特定的显示标准,例如将数字转换为大写的汉字或者添加货币符号等。"Oracle 金额转换"是一个关键的操作,用于提高数据的可读性和合规性。...

    javascript 金额转换(小写转化大写)

    1. **金额格式化**:首先,我们需要对输入的小写金额进行格式化,确保它符合标准的财务格式,即保留小数点后两位,并且在千位添加逗号分隔符。可以使用正则表达式和字符串的replace方法来完成这项工作。 2. **金额...

    jQuery货币金钱格式化数字插件

    该插件不仅适用于静态的数字格式化,也可以用于动态更新,如响应用户输入的实时格式化,或者在表格、图表等动态展示的数据中应用。 ### 兼容性与优化 考虑到jQuery的广泛使用,此插件通常能兼容多种浏览器环境。...

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

    // 对数字进行格式化,确保只有正整数或正小数 number = number.replace(",", "").replace(".", "."); if (!number.matches("\\d+(\\.\\d{1,2})?")) { throw new IllegalArgumentException("Invalid number ...

    大金额转换到中文格式从壹到兆的几种方案

    首先,我们可以使用编程语言内置的字符串格式化功能。例如,在Python中,可以编写自定义函数来实现这一转换。通过创建一个包含所有中文数字的字典,然后遍历输入的数字字符串,逐位查找对应的中文字符。对于每一位,...

    小写金额转换为大写金额

    在金融和会计领域,金额...在实际应用中,我们可能还需要考虑其他因素,如货币符号、格式化规范等。通过理解并遵循这些规则,我们可以编写出能够准确将小写金额转换为大写金额的程序,确保财务数据的准确性和规范性。

    易语言模块数值类文本到金额.rar

    在“数值类文本到金额”模块中,可能会包含如`TextToMoney`这样的函数,接收一个数值类的文本参数,返回格式化的金额字符串。这个函数可能包含了上述的分离、格式化和拼接的逻辑。 4. 应用场景 - 财务软件:在会计...

    转换成中文大写金额

    `MoneyFormat` 类可能包含一系列方法,专门处理数字到中文大写金额的格式化。通常,这类方法会接受一个数字作为输入,然后将其转换为中文的千、百、十、个位的大写形式。例如,数字 "123456.78" 可能会被转换为 "壹...

    JS对货币余额格式化为标准格式

    JS对货币余额格式化为标准格式,最终结果是以英文逗号分隔,并且可以保存一位或者两位小数

    输入小写金额,对应的出现大写金额

    这表明页面中有JavaScript代码用于处理小写金额到大写金额的转换以及格式化显示。 ```javascript function changeAmount() { // 获取输入框中的金额 var smallAmount = document.getElementById('accounttol')....

    汉字金额转换为阿拉伯数字

    接着,使用字典查找每个汉字对应的阿拉伯数字,并进行相应的计算和格式化。最后,组合这些数字,形成完整的阿拉伯数字金额。 在Visual Studio 2008中,这可能涉及到C#或VB.NET语言的编程,可以使用正则表达式进行...

    js字符串转货币格式及金额小写转大写

    在JavaScript(JS)...综上所述,处理JavaScript中的货币格式化和金额转换涉及到字符串操作、正则表达式、自定义函数以及DOM操作等多个方面。通过这些方法,我们可以确保在前端界面中正确地显示符合财务规范的金额。

Global site tag (gtag.js) - Google Analytics