`
fs216
  • 浏览: 6545 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

金额转大写—Trans2RMB

 
阅读更多
public class Trans2RMB {
	/** 大写数字 */
	private static final String[] NUMBERS = { "零", "壹", "贰", "叁", "肆", "伍",
			"陆", "柒", "捌", "玖" };
	/** 整数部分的单位 */
	private static final String[] IUNIT = { "元", "拾", "佰", "仟", "万", "拾", "佰",
			"仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" };
	/** 小数部分的单位 */
	private static final String[] DUNIT = { "角", "分", "厘" };
	private static final int String = 0;

	/**
	 * 得到大写金额。
	 */
	public static String toChinese(String str) {
		str = str.replaceAll(",", "");// 去掉","
		String integerStr;// 整数部分数字
		String decimalStr;// 小数部分数字

		// 初始化:分离整数部分和小数部分
		if (str.indexOf(".") > 0) {
			integerStr = str.substring(0, str.indexOf("."));
			decimalStr = str.substring(str.indexOf(".") + 1);
		} else if (str.indexOf(".") == 0) {
			integerStr = "";
			decimalStr = str.substring(1);
		} else {
			integerStr = str;
			decimalStr = "";
		}
		// integerStr去掉首0,不必去掉decimalStr的尾0(超出部分舍去)
		if (!integerStr.equals("")) {
			integerStr = Long.toString(Long.parseLong(integerStr));
			if (integerStr.equals("0")) {
				integerStr = "";
			}
		}

		// overflow超出处理能力,直接返回
		if (integerStr.length() > IUNIT.length) {
			System.out.println(str + ":超出处理能力");
			return str;
		}

		int[] integers = toArray(integerStr);// 整数部分数字
		boolean isMust5 = isMust5(integerStr);// 设置万单位
		int[] decimals = toArray(decimalStr);// 小数部分数字
		return getChineseInteger(integers, isMust5)
				+ getChineseDecimal(decimals);
	}

	/**
	 * 整数部分和小数部分转换为数组,从高位至低位
	 */
	private static int[] toArray(String number) {
		int[] array = new int[number.length()];
		for (int i = 0; i < number.length(); i++) {
			array[i] = Integer.parseInt(number.substring(i, i + 1));
		}
		return array;
	}

	/**
	 * 得到中文金额的整数部分。
	 */
	private static String getChineseInteger(int[] integers, boolean isMust5) {
		StringBuffer chineseInteger = new StringBuffer("");
		int length = integers.length;
		for (int i = 0; i < length; i++) {
			// 0出现在关键位置:1234(万)5678(亿)9012(万)3456(元)
			// 特殊情况:10(拾元、壹拾元、壹拾万元、拾万元)
			String key = "";
			if (integers[i] == 0) {
				if ((length - i) == 13)// 万(亿)(必填)
					key = IUNIT[4];

				else if ((length - i) == 9)// 亿(必填)
					key = IUNIT[8];
				else if ((length - i) == 5 && isMust5)// 万(不必填)
					key = IUNIT[4];
				else if ((length - i) == 1)// 元(必填)
					key = IUNIT[0];
				// 0遇非0时补零,不包含最后一位
				if ((length - i) > 1 && integers[i + 1] != 0)
					key += NUMBERS[0];
			}
			chineseInteger.append(integers[i] == 0 ? key
					: (NUMBERS[integers[i]] + IUNIT[length - i - 1]));
		}
		return chineseInteger.toString();
	}

	/**
	 * 得到中文金额的小数部分。
	 */
	private static String getChineseDecimal(int[] decimals) {
		StringBuffer chineseDecimal = new StringBuffer("");
		for (int i = 0; i < decimals.length; i++) {
			// 舍去3位小数之后的
			if (i == 3)
				break;
			chineseDecimal.append(decimals[i] == 0 ? ""
					: (NUMBERS[decimals[i]] + DUNIT[i]));
		}
		return chineseDecimal.toString();
	}

	/**
	 * 判断第5位数字的单位"万"是否应加。
	 */
	private static boolean isMust5(String integerStr) {
		int length = integerStr.length();
		if (length > 4) {
			String subInteger = "";
			if (length > 8) {
				// 取得从低位数,第5到第8位的字串
				subInteger = integerStr.substring(length - 8, length - 4);
			} else {
				subInteger = integerStr.substring(0, length - 4);
			}
			return Integer.parseInt(subInteger) > 0;
		} else {
			return false;
		}
	}

	public static String getCapital(String year) {
		String sub = "";
		for (int i = 0; i < year.length(); i++) {
			String s = year.substring(i, (i + 1));
			int cout = Integer.parseInt(s);

			switch (cout) {
			case 0:
				sub += "〇";
				break;
			case 1:
				sub += "一";
				break;
			case 2:
				sub += "二";
				break;
			case 3:
				sub += "三";
				break;
			case 4:
				sub += "四";
				break;
			case 5:
				sub += "五";
				break;
			case 6:
				sub += "六";
				break;
			case 7:
				sub += "七";
				break;
			case 8:
				sub += "八";
				break;
			case 9:
				sub += "九";
				break;
			}
		}

		return sub;
	}

	public static void main(String[] args) {
		System.out.println(Trans2RMB.getCapital("2008"));
		String number = "1.23";
		System.out.println(number + " " + Trans2RMB.toChinese(number));
		number = "1234567890123456.123";
		System.out.println(number + " " + Trans2RMB.toChinese(number));
		number = "0.0798";
		System.out.println(number + " " + Trans2RMB.toChinese(number));
		number = "10,001,000.09";
		System.out.println(number + " " + Trans2RMB.toChinese(number));
		number = "sdf";
		System.out.println(number + " " + Trans2RMB.toChinese(number));
		
	}
}

 

分享到:
评论

相关推荐

    将数字转为中文金额的大写方式(C++版)

    在压缩包的文件列表中,`Trans2RMB.exe`很可能是这个转换工具的可执行文件,用户可以直接运行而无需编译源代码。`Trans2RMB.bat`可能是批处理文件,用于自动化执行某些操作,比如运行可执行文件。`.ilk`和`.pdb`文件...

    将数字转为中文金额的大写方式(Java版)

    在给定的文件列表中,我们可以看到`Trans2RMB.java`是源代码文件,`Trans2RMB.class`是编译后的字节码文件,而`Trans2RMB.bat`可能是用于运行Java程序的批处理脚本。这表明已经有一个完整的解决方案,包括了源代码、...

    trans_jt2cojt

    process simulation 机器人仿真数据转换小插件,用来转换出软件可识别格式。

    TransE数据集+代码entity2id.txt,relation2id.txt,train.txt

    `entity2id.txt` 文件是TransE模型中的关键组成部分,它通常包含了知识图谱中所有实体及其对应的唯一标识符(ID)。这些ID用于将实体名称转化为数值形式,以便在计算中使用。文件中每一行可能包含一个实体名称和对应...

    TransMac11.4免安装版

    TransMac是一款专为Windows用户设计的软件,它允许用户轻松地与Apple的Mac OS系统进行交互,特别是处理与Mac相关的文件格式和磁盘操作。在标题"TransMac11.4免安装版"中,我们可以理解这个版本是11.4的TransMac,...

    affine-trans-point-2d与affine-trans-pixel

    affine-trans-point-2d与affine-trans-pixel

    TransMac_14.4

    2. **写入Mac磁盘**:除了读取,它还能将Windows文件写入到Mac格式化的磁盘或设备上,这对于需要在Mac和Windows之间共享数据的用户来说极其便利。 3. **刻录.dmg镜像**:软件的核心功能之一是刻录Mac OS的.dmg镜像...

    TransE算法代码实现.rar

    2. **负采样**:对于每个正样本三元组,生成一定数量的负样本,这些负样本通常是通过随机替换头实体或尾实体得到的。 3. **损失函数计算**:使用BCE(二元交叉熵)损失函数或者 Margin-based 损失函数(如Hinge Loss...

    TransMac 12.3.rar

    2. **写入DMG文件**:DMG(Disk Image)是Mac OS中常见的镜像文件格式,常用于软件分发和备份。TransMac能让用户将DMG文件写入U盘或其他可移动存储设备,这对于在Windows系统中安装Mac应用或向Mac设备传输数据非常...

    TranSE算法实现及测试

    《 TranSE算法实现及测试详解 》 在知识图谱的研究与应用中,实体关系的表示学习是一项核心任务。TranSE(Translation-based Knowledge Graph Embedding)算法是其中的一种经典模型,它通过向量空间中的翻译操作来...

    key_trans_snake2hp_键盘设计程序_51单片机_trans单片机_

    标题中的“key_trans_snake2hp_键盘设计程序_51单片机_trans单片机”揭示了这个项目的核心内容,这是一个基于51单片机的键盘设计程序,可能用于实现一个类似于经典游戏"Snake 2HP"的控制功能。在8051单片机的环境下...

    中科大-软件测试实验一-人民币数字大写转换黑盒测试实验报告 (2).pdf

    系统概述可能简述了被测试软件的基本功能,即将阿拉伯数字的人民币金额转换为大写的汉字表示,这在财务报表和银行交易中非常常见。文档概述则可能涵盖了报告的目的、内容和结构。 引用文件部分可能列出了参考的技术...

    trans-formas仪表操作

    2. **数据集成**:Trans-Formas可能支持多种数据源的集成,包括数据库、API、日志文件等,帮助用户整合来自不同来源的信息,以获得全面的视图。 3. **数据可视化**:仪表操作通常与数据可视化紧密相关。Trans-...

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

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

    中科大-软件测试实验一-人民币数字大写转换黑盒测试实验报告.docx

    "中科大-软件测试实验一-人民币数字大写转换黑盒测试实验报告" 本实验报告旨在对人民币数字大写转换软件进行黑盒测试,测试目的在于评估该软件的质量和可靠性。下面是实验报告的详细内容: 一、引言 软件测试是...

    TransMac.v10.4 好用的黑苹果软件

    2. **HFS+和APFS文件系统**:这些是苹果操作系统中使用的文件系统,HFS+是较旧的版本,而APFS是较新的,更安全和高效的设计。 3. **黑苹果安装**:TransMac对于非苹果硬件上安装黑苹果系统至关重要,因为它能处理...

    trans_format_图片格式转换_

    标题“trans_format_图片格式转换_”明确指出我们要讨论的主题,即如何将一张图片从一种格式转换为另一种格式。描述中提到,“将某一图片的格式进行,将其转换成另一个格式”,这是对转换过程的简洁概述。接下来,...

    TransMac_35267.zip

    2. **写入DMG文件**:除了读取,TransMac还能将DMG文件写入到USB驱动器、CD、DVD或外部硬盘等存储设备上,以便在Mac电脑上使用。 3. **创建DMG文件**:对于Windows用户来说,TransMac提供了创建DMG文件的功能,方便...

Global site tag (gtag.js) - Google Analytics