Flex——四舍五入函数
在AS3中,有四舍五入效果的方法有Math.round方法和Number.toFixed方法,但这2个方法的效果都不好,有缺陷。 例如: Math.round(21.45),输出了21,但正确的四舍五入是22。 21.4445.toFixed(2),输出了21.44,正确应该是21.45。 这对于金额等敏感的数字是不允许的。 自定义四舍五入算法public?static?function?ToFixed(value:Number,digits:uint = 0):String { ????var?str:String = value.toString(); ????var?index:int = str.indexOf("."); ????var?strInt:String = str; ????var?strDec:String =?""; ????if(index>0) ????{ ????????strInt = str.substr(0,index); ????????strDec = str.substr(index+1,digits); ????} ????while(strDec.length < digits) ????{ ????????strDec +=?"0"; ????} ????var?integer:int = int(strInt+strDec); ??? ????if(index>0) ????{ ????????var?nums:Array =?new?Array(); ????????var?dec:String = str.substr(index+1+digits);//取舍小数部分 ????????for(var?i:int=0;i<dec.length;i++) ????????{ ????????????nums.push(int(dec.charAt(i)));拆分每个数字 ????????} ????????var?n1:int; ????????var?n2:int; ????????while(nums.length>1) ????????{ ????????????n1 = nums.pop(); ????????????if(n1>4) ????????????{ ????????????????n2 = nums[nums.length-1]+1; ????????????????nums[nums.length-1] = n2; ????????????} ????????} ????????if(nums.length && nums[nums.length-1]>4) ????????????integer++; ????} ??? ????str = integer.toString(); ????if(digits==0) ????????return?str; ????while(str.length<strInt.length+strDec.length) ????{ ????????str =?"0"+str; ????} ????return?str.substr(0,str.length-digits) +?"."+ str.substr(str.length-digits); } 测试结果: ToFixed(21.4,2),?输出"21.40" ToFixed(21.45,0)">"21.45" ToFixed(21.45,0),0)">"22" ToFixed(21.0,0)">"21" ToFixed(21.445,0)">"21.45" ToFixed(21.4445,0)">"21.45" ToFixed(21.4444,0)">"21.44" ToFixed(2974.3600000000006,0)">"2974.36" ToFixed(31282.999999999998,0)">"31283.00" ToFixed(31282.059999999998,0)">"1282.06" ToFixed(0,0)">"0.00" ToFixed(0.0000,0)">"0.00" ToFixed(0.0,0)">"0.00" ToFixed(0.01,0)">"0.01" ToFixed(0.059999999998,0)">"0.06" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |