最近面临着找工作,就经常上网找一些常见的面试题,这次的就是把阿拉伯金额转换为中文的金额,不多说,上代码
不过还是有点小问题,想知道自己敲一遍运行下就知道了
import java.math.RoundingMode; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; /** * 将阿拉伯数字金额转换成中文大写数字金额的转换类 */ public class ConvertToCNMoney { /** * 将阿拉伯数字金额转换成中文大写数字金额 * @param money * @return */ public static String toCNMoney(double money) { //转换成指定格式的数字 NumberFormat fmt = NumberFormat.getInstance(); fmt.setMaximumFractionDigits(2);//两位小数 fmt.setRoundingMode(RoundingMode.HALF_UP); fmt.setGroupingUsed(false);//不要千分号 money = Double.valueOf(fmt.format(money)); Map<Integer, String> numbersMap = new HashMap<Integer, String>(10); String[] section = {"", "萬", "億", "兆"};//拆分为四大块,精确到万亿位,即兆 // String[] positions = {"拾", "佰", "仟"}; String[] numbers = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; for (int i = 0; i < numbers.length; i++) { numbersMap.put(i, numbers[i]); } String result = ""; //1.处理小数位(如果有) if (fmt.format(money).contains(".")) { int remainder = (int) ((money * 100) % 100);//取余 int a = remainder / 10; if (a != 0) { result = numbersMap.get(a) + "角"; } int b = remainder % 10; if (b != 0) { if (a == 0) { result += numbersMap.get(0) + numbersMap.get(b) + "分";//处理特殊情况,如2.05(贰圆零伍分) } else { result += numbersMap.get(b) + "分"; } } } //2.处理整数位 long total = (long) (money * 100 / 100);//取整 if (total == 0) { return result.equals("") ? (numbersMap.get(0) + "圆") : result;//少于1元 } int j = 0; String tempResult = ""; do { //每次处理四位数 long t = (total % 10000); String str = ConvertToCNMoney.thousandToUpperCase((int) t, numbersMap, null); total = total / 10000; if (total != 0 && t > 0 && t < 1000) { str = numbersMap.get(0) + str;//如果每次处理之后还有万位且前次处理的四位取余t(0<t<1000),则前面应补零 } tempResult = str + section[j] + tempResult; j++; } while (total != 0); //3.最后别忘了金额单位 result = tempResult + "圆" + result; System.out.print(result); return result; } /** * 处理千位以内阿拉伯数字金额 * @param number * @param numbersMap * @param result * @return */ private static String thousandToUpperCase(int number, Map<Integer, String> numbersMap, String result) { result = result == null ? "" : result; if (number < 10) { return number == 0 ? result : (result + numbersMap.get(number));//取出个位 } if (number < 100) { result = result + numbersMap.get(number / 10) + "拾";//取出十位 return thousandToUpperCase(number % 10, numbersMap, result); } if (number < 1000) { result = result + numbersMap.get(number / 100) + "佰";//取出百位 //处理特殊情况,如201 if (0 < number % 100 && number % 100 < 10) { result += numbersMap.get(0);//加个零 } return thousandToUpperCase(number % 100, numbersMap, result); } if (number < 10000) { result = result + numbersMap.get(number / 1000) + "仟";//取出千位 //处理特殊情况,如2001,2011 if (0 < number % 1000 && number % 1000 < 100) { result += numbersMap.get(0);//加个零 } return thousandToUpperCase(number % 1000, numbersMap, result); } return result; } public static void main(String args[]){ toCNMoney(12323430100982.2); } }
不过还是有点小问题,想知道自己敲一遍运行下就知道了
发表评论
-
Hashtable和HashMap
2010-11-16 10:48 633HashTable的应用非常广泛,HashMap是新框架中用来 ... -
在含有负数的一百个整数中,找出连续三个数之和最大的部分
2010-11-12 11:39 2477在含有负数的一百个整数中,找出连续三个数之和最大的部分,并打印 ... -
构造器是类的静态方法?
2010-09-10 15:40 1167《Java编程思想》中文版第四版的315页的第二段是这么写的: ... -
Pattern和Matcher
2010-09-09 19:51 984一般来说,比起功能有限的String,我们更愿意构 ... -
为什么在重写equals()方法时,一般都会重写HashCode()方法?
2010-09-06 11:09 1739重写equals()方法主要是为了方便比较两个对象 ... -
数组的排序算法(插入排序、快速排序)
2010-09-04 14:52 1929在实现数组元素排序时,排序的算法有很多,例如冒泡排序法,选择排 ... -
X+=Y和X=X+Y两种实现加法方式的区别
2010-09-03 09:37 1336为了方便程序员进行频繁的赋值操作,Java提供了很多 ... -
不用系统函数将字符串转换成整型
2010-08-31 09:28 1915昨天无意中浏览到Magic的博客,发现里面又很多的好东西,讲的 ... -
Java参数传递中的传值和传址的区别
2010-08-30 10:20 2551昨天一个人跑到昆山市区的新华书店,看到了一本叫做《你必须知道的 ... -
String转Integer源码分析
2010-08-27 20:19 1462今天参加了开发类的面试,面试官问了我一个问题,给你一个Stri ...
相关推荐
1、该dll能将阿拉伯数字转换为汉字数字或者中文大写金额。例如1234567.07可转换为: “一百二十三万四千五百六十七点零七”或“壹佰贰拾叁万肆仟伍佰陆拾柒圆零柒分”。 目前支持正负千亿以内(整数部分不超过12位)...
将阿拉伯数字转化成汉字金钱 如1234.45转化为壹仟贰佰叁拾肆元肆角伍分
读入一串阿拉伯数字,将其转化为中文金额的大写方式。这是老师布置的一题回家作业。花了一天时间完成的。虽然代码比较烦琐。但是所有的几率都考虑到了。
自己写的将阿拉伯数字金额转换为中国传统形式人民币值的小程序,亲测可用!
名称:“C# - 阿拉伯数字金额转换为繁体数字金额” 说明:将阿拉伯数字金额转换为繁体数字金额 ^_^
用visual studio 2008编写的将汉字金额转换为阿拉伯数字显示形式,网站上都是讲阿拉伯数组转化为汉字,自己索性写了一个。。
用java实现将阿拉伯数字转换为金额的汉字大写
在android中,有时候会被要求讲阿拉伯数字转换为中文数字,例如书籍的页码。这里特地优化了转换过程
java实现阿拉伯数字 转换为 汉字数字 算法
将阿拉伯数字表示的货币数值转换成以中文大写表示的货币数值。可以支持十万元级别和百万元级别。
阿拉伯数字金额转换成汉字金额,比如1000.00 转换成 壹仟元。
将阿拉伯数字转换为大写数字,主要解决小数点问题,
java程序代码,阿拉伯数字转化为大写
本例子将数字以汉字中的大写数字表示形式显示在页面中。例如“78.79”转换城”“柒拾捌元柒角玖分
独立开发,实测可用, 将阿拉伯和中文数字组合的字符串转成阿拉伯数字的整型 包。例如: “八万三千20”就可以转成整型 803020 。解压后,引用包。调用方法 在UnitTest.java 中有
C#源码阿拉伯数字金额转换为繁体数字金额 本人收藏了3年的资源 现放出 都是总结了很多系统 软件项目实施过程中的经验的 慢慢积累的
阿拉伯数字转大写金额+大写金额转阿拉伯数字阿拉伯数字转大写金额+大写金额转阿拉伯数字
java 阿拉伯数字转化中文大写。包括小数点的操作。是转化的源代码。可以参考这修改出所需格式。
修改了输入小数转换一个错误,修正窗体可调整和图标等
佛慈悲,应要求给整个下载在我的资源中,其中包含自学习桌面编程以来所找的资料及未完成的部分学习代码,从未完成的开始转入了另一个急需开发软件的研发工作,所以没时间来作这个的继续,打包原封不动提供学习了. ...