`

金额大小写转换工具类

 
阅读更多
package app.pattern;

import java.math.BigDecimal;
import java.text.DecimalFormat;

/**
 * 还是有点小bug,超过1亿后就会出现小问题;
 * 金额大小写转换工具类
 * @author muyx
 */
public class FigureTransformUtil {
	//金额大写数组,和数组下标对应
	private static final String numberChineseUppercase[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
	//金额单位
	private static final String units[] = { "分", "角", "元", "", "拾", "百", "千", "万", "拾", "百", "千", "亿", "拾", "百", "千",
			"万", "拾", "百", "千" };
	private static final String pattern = "#,###.00";

	private static final DecimalFormat decimalFormat = new DecimalFormat(pattern);

	public static void main(String[] args) {
		String[] testData = { /*"12", "12.01", "102.00", "102.01", "100,000", "102,002.46", "12,000,003,034.90",
								*/"1230000000011111.45" };
		for (int i = 0; i < testData.length; i++) {
			System.out.println(toMoneyStyle(testData[i]));
			System.out.println(toChineseUppercase(testData[i]));
		}
	}

	public static String toMoneyStyle(double number) {
		return decimalFormat.format(number);
	}

	public static String toMoneyStyle(String number) {
		return toMoneyStyle(numberToBigDecimal(number).doubleValue());
	}

	public static String toChineseUppercase(String money) {
		BigDecimal bigDecimal = numberToBigDecimal(money);
		char[] charArray = bigDecimal.toString().toCharArray();
		StringBuilder chineseUppercase = new StringBuilder();
		String prefixZeroBuffer = "";

		for (int i = 0, len = charArray.length; i < len; i++) {
			//单位("分", "角", "元"....)数组的下标位置;
			int unitLocation = len - i - 1;
			if (charArray[i] != '.') {
				int point = Integer.valueOf(charArray[i] + "");
				if (point == 0) {
					if (unitLocation == 7 || unitLocation == 11 || unitLocation == 15) {//无论怎么都不能少的处理
						chineseUppercase.append(units[unitLocation]);
						prefixZeroBuffer = "";
					} else {
						prefixZeroBuffer = numberChineseUppercase[point];
					}
				} else {
					//当前位置不为0时,零的缓存+数字大写+单位
					chineseUppercase.append(prefixZeroBuffer).append(numberChineseUppercase[point])
							.append(units[unitLocation]);
					prefixZeroBuffer = "";
				}
			} else {
				chineseUppercase.append(units[unitLocation]);
				prefixZeroBuffer = "";
			}
		}
		return chineseUppercase.toString();
	}

	/**
	 * 格式检查,并转换成BigDecimal
	 */
	private static BigDecimal numberToBigDecimal(String moneyNumer) {
		BigDecimal money = null;
		moneyNumer = moneyNumer.trim().replaceAll(",", "");//替换千分位
		if (moneyNumer.indexOf(".") == -1)
			moneyNumer += ".00";
		String regex = "[+|-]?\\d+(\\.{1}\\d{2})?";
		if (moneyNumer.matches(regex) && (moneyNumer.length() - 1) < units.length) {
			money = new BigDecimal(moneyNumer);
		} else {
			throw new RuntimeException("金额格式不正确");
		}
		return money;
	}
}

 

分享到:
评论

相关推荐

    金额大小写转换工具

    金额大小写转换工具

    c#金额大小写转换类

    总之,C#中的金额大小写转换类是一个实用的工具,通过精心设计的算法和数据结构,可以将数字金额准确且高效地转换为中文大写形式。这个过程涉及到了字符串处理、数值运算以及对中文数字习惯的理解,是C#开发者在处理...

    字母大小写转换工具和人民币大小写转换工具

    因此,有了人民币大小写转换工具,输入数字后即可自动生成对应的汉字大写金额,极大地提高了工作效率和准确性。这种工具可能包含内置的数字到汉字映射,以及一些特定规则,比如零的表达(如“零”、“O”或“—”)...

    金额大小写转换vc++

    首先,我们要了解金额大小写转换的基本规则。在中文环境下,金额通常分为整数部分和小数部分,每四位为一个“级”,从右向左分别为个、十、百、千,依次类推,直至万亿。对于小数部分,通常只保留到分,且没有特定的...

    C#人民币大小写金额转换

    本文档详细介绍了一个基于C#实现的人民币金额大小写转换工具类的实现原理、代码细节以及应用场景。 #### 二、核心功能与技术要点 ##### 2.1 核心功能 本工具类主要实现了以下三个核心功能: 1. **整数部分转大写**...

    money 金额大小写转换

    "money 金额大小写转换"是一款工具软件,专门解决此类问题。例如,输入数字“123.45”,该软件能自动将其转换为“壹佰贰拾叁元肆角伍分”的汉字形式。 这款软件的工作原理可能涉及以下关键技术点: 1. **数字与...

    VB.NET编写的人民币大小写转换工具

    VB.NET编写的人民币大小写转换工具,实现小写转大写,大写转小写。

    金额大小写转换

    总的来说,"金额大小写转换DLL"是一个实用的工具,它简化了开发者处理金额转换的任务。通过合理调用和理解其内部机制,可以有效地提高工作效率,确保财务数据的规范化输出。在实际项目中,我们应该根据具体需求,...

    中文金额大小写转换工具

    一款人民币中文大写金额和数字小写相互转换的小工具,可实现10的23次方以内的数字转换。

    财务金额大小写转换器下载

    手动进行这种转换可能会出错,因此出现了“财务金额大小写转换器”这样的工具,旨在帮助财务人员快速、准确地完成这项工作。 这款“财务金额大小写转换器”是一款小巧实用的软件,专为财务人员设计。它简化了数字到...

    excel金额大小写转换.rar

    压缩包中的“金额大小写转换”文件可能是外部开发的一个工具或模板,它可以简化操作,一键完成转换。这样的工具通常具有用户友好的界面,只需要输入或导入数据,就能自动转换。 5. **注意事项**: - 在转换之前,...

    人民币大小写转换

    Java中关于金额小写转换为大写的工具类

    pb实现金额的大小写转换

    首先,我们要了解金额大小写转换的基本规则。在中国,大写数字通常用于正式的财务报表和发票中,以避免因手写数字产生的混淆。大写数字包括:零(零)、壹(一)、贰(二)、叁(三)、肆(四)、伍(五)、陆(六)...

    VC开发的金额大小写转换

    总的来说,"VC开发的金额大小写转换"是一个实用的工具,能够帮助开发者快速地在C++环境下处理银行系统中的金额格式转换需求。通过理解和运用该项目中的代码,可以提升开发效率,确保金融系统的数据准确性。对于学习...

    c#经典金额大小写转换

    ### C# 实现经典金额大小写转换 #### 概述 在金融系统、会计软件以及银行应用程序中,...通过上述分析与实现,我们可以构建出一个完整的金额大小写转换工具,不仅能够满足基本的需求,还具备了一定的扩展性和健壮性。

    金额大小写转换程序

    在IT行业中,编程任务经常涉及到各种实用工具的开发,其中之一就是“金额大小写转换程序”。这类程序主要用于将数字金额转换成我们日常财务中常见的大写汉字形式,以满足会计、银行和其他金融业务的需求,确保金额的...

    jsp页面调用applet实现人民币的大小写转换.docx

    通过JSP页面调用Applet实现人民币的大小写转换,可以实时地将用户输入的金额转换为大写或小写形式。该实现方法可以应用于电子商务、银行等领域,提供了一个便捷的金额转换工具。 六、技术要点 * 使用JSP页面调用...

    VB货币金额大小写转换源代码

    下面我们将详细探讨VB货币金额大小写转换的相关知识点。 1. **货币格式规范**:在财务系统中,数字通常需要按照特定的格式表示,比如人民币的格式要求,小数部分保留两位,千位分隔符(逗号),并且有明确的正负号...

    数字金额大小写转换

    在这个场景中,"数字金额大小写转换"通常指的是将阿拉伯数字格式的金额转换成中文大写的表示方式,以便于财务人员进行读取和核对,减少输入错误的可能性。 在中国,根据会计规范,大额交易的金额通常会用中文大写...

Global site tag (gtag.js) - Google Analytics