AS写的一个RMB转换为大写的例子

 package cn.eu.util
{
 import mx.controls.Alert;
 public class RMB
 {
   private var amount:Number = 0.0;
   private  static  var  NUM:String = "零壹贰叁肆伍陆柒捌玖";
   private  static  var UNIT:String = "仟佰拾个";
   private  static  var GRADEUNIT:String = "仟万亿兆";
   private  static  var DOTUNIT:String = "角分厘";
   private  static  var GRADE:int = 4;
   private  static  var nf:NumberFormat = new NumberFormat("#.000");
   public function RMB(amount:Number) {
    this.amount = amount;
   }   
   public static function toBigAmt(amount:*):String{
   var amt:String = nf.format(amount,{group:",",decimal:"."});
      var d:Number = new Number(amount);
      var dotPart:String = ""; //取小数部分
      var intPart:String = ""; //取整数部分
      var dotPos:int;
      if((dotPos = amt.indexOf('.')) != -1) {
    intPart = amt.substring(0, dotPos);
      dotPart = amt.substring(dotPos + 1);
      }else {
         intPart = amt;
      }
      if(intPart.length > 16) {
       Alert.show("数字太大了!");
      }
      var intBig:String = intToBig(intPart);
      var dotBig:String  = dotToBig(dotPart);
      //以下代码稍做修改,优化显示
      if ((dotBig.length == 0)&&(intBig.length != 0)) {
         return intBig + "元整";
      }else if((dotBig.length == 0)&&(intBig.length == 0)){
         return intBig + "零元";  
      }else if((dotBig.length != 0)&&(intBig.length != 0)) {
         return intBig + "元" + dotBig;
      }else{
        return dotBig;  
      }
    }
    private static function dotToBig(dotPart:String):String{
      //得到转换后的大写(小数部分)
      var strRet:String = "";
      for(var i:int=0; i<dotPart.length && i<3; i++){
       var num:int;
         if((num = int(dotPart.substring(i,i+1))) != 0)
           strRet += NUM.substring(num,num+1) + DOTUNIT.substring(i,i+1);
      }
     return strRet;
    }
    private  static function intToBig(intPart:String):String{
       //得到转换后的大写(整数部分)
       var grade:int; //级长
       var result:String = "";
       var strTmp:String = "";
       //得到当级长
       grade = intPart.length / GRADE;
       //调整级次长度
       if(intPart.length % GRADE != 0) grade += 1;
       //对每级数字处理
       for(var i:int = grade; i >= 1; i--){
            strTmp = getNowGradeVal(intPart, i);//取得当前级次数字
            result += getSubUnit(strTmp);//转换大写
            result = dropZero(result);//除零
            //加级次单位
            if( i>1 ) //末位不加单位
                //单位不能相连续
                if(getSubUnit(strTmp)== "零零零零"){
                    result += "零";
                }else{
                    result += GRADEUNIT.substring(i - 1, i);
                }
        }
        return result;
    }
    private static function getNowGradeVal(strVal:String,grade:int):String{
        //得到当前级次的串
        var rst:String;
        if(strVal.length <= grade * GRADE)
            rst = strVal.substring(0,strVal.length - (grade-1)*GRADE);
        else
            rst = strVal.substring(strVal.length - grade*GRADE,strVal.length - (grade-1)*GRADE);
        return rst;
    }
  
    private static function getSubUnit(strVal:String):String{
        //数值转换
        var rst:String = "";
  
        for(var i:int = 0;i< strVal.length; i++){
            var s:String = strVal.substring(i,i+1);
            var num:int = int(s);
            if(num == 0){
                //“零”作特殊处理
                if(i != strVal.length) //转换后数末位不能为零
                    rst += "零";
            }else{
                //If IntKey = 1 And i = 2 Then
                    //“壹拾”作特殊处理
                    //“壹拾”合理
                //Else
                    rst += NUM.substring(num,num+1);
                //End If
                //追加单位
                if(i != strVal.length-1 )//个位不加单位
                  rst += UNIT.substring(i+4-strVal.length,i+4-strVal.length+1);
            }
        }
        return rst;
    }
    private static function  dropZero(strVal:String):String{
        //去除连继的“零”
        var strRst:String;
        var strBefore:String; //前一位置字符
        var strNow:String;    //现在位置字符
        strBefore = strVal.substring(0,1);
        strRst = strBefore;
        for(var i:int= 1; i<strVal.length; i++) {
            strNow = strVal.substring(i, i+1);
            if(strNow == "零" && strBefore == "零")
                ;//同时为零
            else
                strRst += strNow;
            strBefore = strNow;
        }
        //末位去零
        if(strRst.substring(strRst.length-1, strRst.length) == "零")
          strRst = strRst.substring(0,strRst.length-1);
        return strRst;
    }
 }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值