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

Flex——四舍五入函数

发布时间:2020-12-15 01:42:11 所属栏目:百科 来源:网络整理
导读:在 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,输出"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"

(编辑:李大同)

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

    推荐文章
      热点阅读