`

告诉你什么是优雅的代码(6)------阿拉伯钱数转换为中文形式

    博客分类:
  • Java
 
阅读更多
http://www.iteye.com/topic/766812里谈到
题目: 将正整数的阿拉伯钱数转换为中文形式,如1011→一千零一十一,输出。

作者做得相当啰嗦,也比较低效,正好有缘遇到优雅代码大师区区在下,于是一段优雅代码得以诞生:


public class MoneyTrans {
	
	private static String[] ChinaDigit = {"零","一","二","三","四","五","六","七","八","九"};
	private static String[] UNIT = {"","","十","百","千"};
	private static String[] BIGUNIT = {"","万","亿","兆"};
	private static long MAX = 10000000000000000L - 1;
	private char[] digit;
	public String trans(long n) throws Exception{
		if(n > MAX){
			throw new Exception("数字过大,最多可处理到千兆位");
		}
		StringBuffer buff = new StringBuffer();
		boolean isPrePartZero = false;
		digit = String.valueOf(n).toCharArray();
		int length = digit.length;		
		int pos = (length - 1)/4;
		int headLength = (length - 1)%4 + 1;	
		//  xxxxxxxxxx -->  xx|xxxx|xxxx
		buff.append(partTrans(0,headLength) + BIGUNIT[pos--]);
		for (int i = headLength;i < length ; i = i + 4) {
			String part = partTrans(i , i + 4);
			if(part.length() == 0){
				isPrePartZero = true;
			}else{
				if(isPrePartZero && !part.startsWith(ChinaDigit[0])){
					buff.append(ChinaDigit[0]);
				}
				buff.append(part +  BIGUNIT[pos]) ;
				isPrePartZero = false;
			}
			pos--;
		}
		return buff.toString();
	}
	
	private  String partTrans(int start, int end) {
		StringBuffer buff = new StringBuffer();
		boolean isPreDigitZero = false;
		for (int i = start; i < end; i++) {
			int cur = digit[i] - '0';
			if(cur != 0 ){
				if(isPreDigitZero){
					buff.append(ChinaDigit[0]);
				}
				buff.append(ChinaDigit[cur] + UNIT[end - i]);
				isPreDigitZero = false;
			}
			else {			
				isPreDigitZero = true;
			}			
		}		
		return buff.toString();		
	}

	public static void main(String[] args) throws Exception {		
		MoneyTrans transtor = new MoneyTrans();    
		String money = transtor.trans(9000000000000000L);
		System.out.println(money);
	}

}




结果:
九千兆

1
2
分享到:
评论
4 楼 wfm0105 2016-02-04  
不支持小数
3 楼 andyadc 2014-04-25  
2 楼 yangguo 2010-09-19  
zhengshuangxi1226 写道
MoneyTrans transtor = new MoneyTrans();
String money = transtor.trans(0000100002);
System.out.println(money);


你还可以写成 -100 , -1000.你有兴趣就去验证一下好了。
1 楼 zhengshuangxi1226 2010-09-19  
MoneyTrans transtor = new MoneyTrans();
String money = transtor.trans(0000100002);
System.out.println(money);

相关推荐

    中文数字转换为阿拉伯数字

    标题“中文数字转换为阿拉伯数字”提示我们,这个项目或代码库的目标是实现一个功能,能够将中文数字字符串转化为等值的阿拉伯数字。这在处理中文文本,如从用户输入中提取数字或者进行自然语言处理时,是非常有用的...

    中文数字转换阿拉伯数字

    在IT领域,中文数字转换阿拉伯数字是一个常见的编程需求,尤其在中国的文化背景下,有时需要将中文表述的数字转化为阿拉伯数字用于计算或数据处理。这个任务涉及到自然语言处理(NLP)和字符串处理技术,通常通过...

    中文数字转成阿拉伯数字 java 实现

    在Java编程语言中,将中文数字转换为阿拉伯数字是一个常见的需求,特别是在处理中文文本数据时。这个场景下,我们有一个名为“中文数字转成阿拉伯数字 java 实现”的压缩包,包含了一个实现此功能的Java包和一个单元...

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

    这个项目"汉字金额转换为阿拉伯数字"的目标是创建一个程序或函数,它能够接受汉字表示的金额,如“壹拾贰万叁仟肆佰伍拾陆元柒角捌分”,并将其转换为对应的阿拉伯数字形式,如“123456.78”。在描述中提到,虽然...

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

    本例子提供了一个解决方案,将数字如"78.79"转化为汉字的大写形式,即"柒拾捌元柒角玖分"。 首先,我们需要理解汉字大写数字的基本规则。在中文中,阿拉伯数字1至9对应的汉字大写分别是壹、贰、叁、肆、伍、陆、柒...

    oracle数字转换中文

    这个函数的核心目的是将输入的数字(以字符串形式)转换为其对应的中文大写形式,这在财务报表、合同文档等场合中非常有用。 #### 函数内部结构 1. **初始化变量**:首先定义了几个用于存储中间计算结果和最终输出...

    java金额转换,阿拉伯数字转换成中国传统形式。

    在Java编程中,将阿拉伯数字转换为中国传统形式的金额表示是一项常见的需求,特别是在财务系统或者银行应用中。这种转换能够使数字更符合中国人的阅读习惯,增加可读性。在这个问题中,我们要处理的是将像...

    JavaScript实现把数字转换成中文

    以下是一个简单的 JavaScript 函数,用于将阿拉伯数字转换为中文数字。 首先,我们定义了一个名为 `_change` 的对象,这个对象包含了三个数组: 1. `ary0` 数组存储了0到9的中文数字。 2. `ary1` 数组存储了10、...

    汉语数字串与阿拉伯数字串间转换小工具(C源码)

    本项目是关于"汉语数字串与阿拉伯数字串间转换小工具",它使用C语言编写,专注于字符串操作,能够实现两种数字表示形式的互换,并且支持汉语数字串的大小写转换。这个工具对于处理中文数字和阿拉伯数字之间的转换...

    会计阿拉伯数字转换中文大写

    阿拉伯数字(1、2、3等)是我们日常使用的数字系统,但在正式的会计文档中,通常需要将这些数字转换为中文大写(壹、贰、叁等),以防止篡改和提高审计准确性。在编程领域,尤其是使用Visual Basic (VB) 这样的语言...

    使用阿拉伯数字转换成汉字的应用程序源码(9KB)...

    该应用程序的标题表明其主要功能是将阿拉伯数字转换为汉字,这在中文编程环境中非常有用,因为中文常常需要以汉字形式表示数字,特别是在正式文本、财务报表或面向公众的输出中。源码提供了实现这一功能的具体算法和...

    用C++编写数字转换成汉字大写的程序

    标题 "用C++编写数字转换成汉字大写的程序" 提示我们要探讨的是如何利用C++编程语言将阿拉伯数字转换为汉字大写,这种转换在银行、财务等对账单有明确要求的领域尤为常见。汉字大写数字通常用于增强财务记录的清晰度...

    js实现将数字转换为中文大写

    标题和描述中提到的知识点是关于如何使用JavaScript(简称js)编程语言将阿拉伯数字转换为中文大写形式。这种转换通常在财务相关的软件中很常见,尤其是涉及到金额表述时,为了符合财务规范或增加可读性,需要将数字...

    数字转换为中文大写代码段

    标题 "数字转换为中文大写代码段" 描述了一个编程任务,即把数字转换成中文大写的表示形式。这个过程通常在财务或者会计领域中使用,例如在制作发票或者进行金融交易时,需要将数字金额以中文大写的形式展示,以避免...

    阿拉伯数字转换成英文和大写

    标题 "阿拉伯数字转换成英文和大写" 描述的是一个使用 DELPHI 开发的程序,该程序能够将Excel表格中的阿拉伯数字转换为英文和大写的表示形式,特别适用于财务领域,可以保留小数点后两位。这个程序的实现涉及到了...

    excel中将阿拉伯数字转换成中文大写数字的函数方式.docx

    这个 VBA 代码定义了一个名为 NumberString 的函数,该函数将阿拉伯数字 x 转换成中文大写数字,format 参数指定了要使用的中文大写数字格式,type 参数指定了要返回的数字类型。然后,我们可以在 Excel 表格中使用...

    阿拉伯数字转换成英文大写

    这个代码使用了 SpellNumber 函数来将阿拉伯数字转换成英文大写形式。SpellNumber 函数将数字字符串转换成英文大写形式,并返回结果。 SpellNumber 函数的实现主要基于以下几个步骤: 1. 首先,我们需要将数字...

    将阿拉伯数字转成中文字的程式

    本文将详细介绍一个用Visual Basic(简称VB)编写的程序,该程序的主要功能是将输入的阿拉伯数字转换为对应的中文大写形式。这在财务系统、合同文件等场景中非常有用,因为这些场合通常需要使用中文大写数字来避免...

    易语言源码数字转换汉字大写.7z

    在标题"易语言源码数字转换汉字大写.7z"中,我们可以推断出这个压缩包包含的是使用易语言编写的源代码,其功能是将数字转换成汉字大写形式。这种转换在财务报表、会计领域以及一些需要清晰显示金额的场合非常常见,...

    将数字转换为大写(C#)

    在编程领域,尤其是在C#语言中,有时我们需要将阿拉伯数字(即我们日常使用的1, 2, 3等)转换为其对应的中文大写形式。这通常在财务或会计软件中非常常见,因为中国传统的财务记录习惯使用中文大写数字来避免欺诈...

Global site tag (gtag.js) - Google Analytics