当前位置:  开发笔记 > 编程语言 > 正文

如何处理Actionscript中的Number精度?

如何解决《如何处理Actionscript中的Number精度?》经验,为你挑选了3个好方法。

我将BigDecimal对象与BlazeDS序列化为Actionscript.一旦他们将Actionscript作为Number对象命中,它们的值就像:

140475.32 变成 140475.31999999999998

我该如何处理?问题是如果我使用精度为2 的NumberFormatter,那么该值将被截断为140475.31.有任何想法吗?



1> Fraser..:

这是我对这个问题的通用解决方案(我在这里写了博客):

var toFixed:Function = function(number:Number, factor:int) {
  return Math.round(number * factor)/factor;
}

例如:

trace(toFixed(0.12345678, 10)); //0.1

0.1234567810; 这给了我们1.2345678.

当我们四舍五入1.2345678,我们得到1.0,

最后,1.0除以10等于0.1.

另一个例子:

trace(toFixed(1.7302394309234435, 10000)); //1.7302

1.730239430923443510000; 这给了我们17302.394309234435.

当我们绕过时,17302.394309234435我们得到17302,

最后,17302除以10000等于1.7302.


编辑

基于下面的匿名答案,对方法的参数进行了很好的简化,使得精度更加直观.例如:

var setPrecision:Function = function(number:Number, precision:int) {
 precision = Math.pow(10, precision);
 return Math.round(number * precision)/precision;
}

var number:Number = 10.98813311;
trace(setPrecision(number,1)); //Result is 10.9
trace(setPrecision(number,2)); //Result is 10.98
trace(setPrecision(number,3)); //Result is 10.988 and so on

NB我在这里添加了这个,以防万一有人认为这是答案而且不向下滚动......


这与native toFixed函数有什么不同?

2> 小智..:

对于任何感兴趣的人来说,Frasers功能只是略有不同.

function setPrecision(number:Number, precision:int) {
 precision = Math.pow(10, precision);
 return (Math.round(number * precision)/precision);
}

所以使用:

var number:Number = 10.98813311;
trace(setPrecision(number,1)); //Result is 10.9
trace(setPrecision(number,2)); //Result is 10.98
trace(setPrecision(number,3)); //Result is 10.988 and so on



3> jnichols959..:

Number.toFixed(precision)在ActionScript 3中使用它来执行此操作:http: //livedocs.adobe.com/flex/3/langref/Number.html#toFixed%28%29

它正确处理舍入并指定小数点后显示的位数 - 与Number.toPrecision()此不同的是,无论小数位置如何,都会限制显示的总位数.

var roundDown:Number = 1.434;                                             
// will print 1.43                                                        
trace(roundDown.toFixed(2));                                              

var roundUp:Number = 1.436;                                               
// will print 1.44                                                        
trace(roundUp.toFixed(2));                                                

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有