大大毛 的笔记

  DDM's Note

哪怕没有办法一定有说法,
就算没有鸽子一定有乌鸦,
固执无罪 梦想有价,
让他们惊讶.

posts - 14, comments - 23, trackbacks - 0, articles - 58
   :: 首页 ::  :: 联系 ::  :: 管理

货币金额大写

Posted on 2006-11-06 22:29 大大毛 阅读(3397) 评论(0)  编辑  收藏 所属分类: JAVA

      昨天,在群上谈论到货币金额大写转换的问题,有空就自己做了一个。

      在实现过程中由于采用的解决方法而遇到一点问题:
            由于输入的是一个货币数字字符串,因此对输入的合法性检验必不可少,讨论中提到有用正则来进行检验,不过这个我不在行,所以我的思路是利用JDK自带的类型转换来完成,但是在先前使用 Double.parseDouble(String money); 时碰到了字符长度的限制,长了一点就会超出double的取值范围,后来转而使用 java.math.BigDecimal 类来实现字符串的检验以及一点点变换。

            考虑到以后使用中的通用性,因此把各位的符号(如仟,佰,拾,万等)提了出来,这样如果以其它的形式(如E文)表现,不会影响到实现。

            小数后精度的考虑,我想一个字符型货币不一定就只能到小数后两位的,因此没有依赖于2位小数的实现,而是根据小数后单位符号的个数来规定精度。例如将小数后的符号由 {"角","分"} 改成 {"角","分","厘"} 的话,就可以实现对小数后三位的格式化输出。

            在实现中,我开放了两个接口,以便使用
     /**
     * 货币数字形式转换成大写
     * 
@param  strMoney(String):货币的数字形式字符串
     
*/

    
public   static  String parseMoney(String strMoney)  throws  NumberFormatException
            这个接口,是用于检验+转换的,它可以实现该类的全部功能
     /**
     * 转换成大写金额
     * 
@param  strMoney(String):规范的数字货币形式字符串
     
*/

    
public   static  String toFrmString(String strMoney)
            这个接口,我也开放出来,在实现中它完成部分功能,仅仅提供对无符号货币形式的转换,它完成转换的核心逻辑,开放它是出于以后能使用新增的输入检验逻辑。

      整个类的实现(没有想到好名称,所以就随便取了一个):
类实现代码

      运行
            输入1023470847959328310393.03
            输出:壹拾万零贰仟叁佰肆拾柒亿零捌佰肆拾柒万玖仟伍佰玖拾叁亿贰仟捌佰叁拾壹万零叁佰玖拾叁元零叁分
            输入:10010000000
            输出:壹佰亿零壹仟万元
            输入:.01
            输出:壹分

只有注册用户登录后才能发表评论。


网站导航:
 

i am ddm