加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex——四舍五入函数

发布时间:2020-12-15 04:43:01 所属栏目:百科 来源:网络整理
导读:在AS3中,有四舍五入效果的方法有Math.round方法和Number.toFixed方法,但这2个方法的效果都不好,有缺陷。 例如: Math.round(21.45),输出了21,但正确的四舍五入是22。 21.4445.toFixed(2),输出了21.44,正确应该是21.45。 这对于金额等敏感的数字是不允

在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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读