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,输出"21.45" ToFixed(21.45,0),输出"22" ToFixed(21.0,输出"21" ToFixed(21.445,输出"21.45" ToFixed(21.4445,输出"21.45" ToFixed(21.4444,输出"21.44" ToFixed(2974.3600000000006,输出"2974.36" ToFixed(31282.999999999998,输出"31283.00" ToFixed(31282.059999999998,输出"1282.06" ToFixed(0,输出"0.00" ToFixed(0.0000,输出"0.00" ToFixed(0.0,输出"0.00" ToFixed(0.01,输出"0.01" ToFixed(0.059999999998,输出"0.06" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |