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);
}
}
结果:
九千兆
分享到:
相关推荐
使用阿拉伯数字转换成汉字的应用程序源码(9KB)
{-------------------------------------------------------------------- 货币数字转为为中文大写的组件 Version 1.31 by SNAKEJIAO 2003.4.13简介: 可以转化整数,浮点数,及时间日期型数据 配合别名列表可以进行...
数字到阿拉伯语单词翻译表 :keycap_1: 介绍该练习的目的是提供一种通用功能,该功能简单但准确,可以按照阿拉伯文的语法规则/设置将数字(整数)转换为阿拉伯语单词(并带有选项)。 该功能不得与特定主题计数绑定...
将阿拉伯数字的金额转换成中国传统的形式,并且附有对该代码的所有解释说明。
数字大小写转换是指将数字表示的阿拉伯数字(例如123)转换为相应的中文大写数字(例如一百二十三)或英文单词形式(例如One Hundred Twenty-Three),或者将中文大写数字或英文单词形式转换为阿拉伯数字。
数字到阿拉伯语单词翻译表 :keycap_1: 介绍该练习的目的是提供一种通用功能,该功能简单但准确,可以按照阿拉伯文的语法规则/设置将数字(整数)转换为阿拉伯语单词(并带有选项)。 该功能不得与特定主题计数绑定...
用java代码 实现金额阿拉伯数字 转成 中文汉字大写形式
java代码-软三47号JSP3
当一个Windows函数返回一个错误代码时,它常常可以用来了解函数为什么会运行失败。Microsoft公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个32位的号码。 从系统内部来讲,当一个Windows函数...
摘要:VC/C++源码,字符处理,数字大写 ...实现思路是在数据库中保存为阿拉伯数字的形式,然后在显示时根据数字的位置和大小,将阿拉伯数字逐个转换为中文大写的数字。 运行环境:Windows/Visual C/C++
再点击“选择存放转换出来的图象文件的文件夹”下一行右边的那个打开文件夹图标单击后,注意:这里最好选一个新的空白文件夹,为什么要用一个新的文件夹?因为这样会比较方便你管理,要是你突然想把图片和PDG文件...
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次...
Java基础 6 1. 面向对象的特征有哪些方面 6 2. String是最基本的数据类型吗? 7 3. int 和 Integer 有什么区别 7...15. 金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 40
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 三. html&JavaScript&ajax部分 1. 判断第二个日期比第一个日期大 2. 用table显示n条记录,每3行换一次颜色,即...
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次...
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次...
将阿拉伯数字替换为中文大写形式... 20 替换文本中的URL为链接... 21 从HTML代码段删除指定标签极其内容... 21 用正则给文本分段... 22 转换源代码中的标签... 22 给属性添加双引号... 23 给table加上tbody. 25 去掉...
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript&ajax部分 82 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次...
12.金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出。 81 三. html&JavaScript;&ajax;部分 82 1. 判断第二个日期比第一个日期大 82 2. 用table显示n条记录,每3行换一次...