flex – 如何处理Actionscript中的Number精度?

前端之家收集整理的这篇文章主要介绍了flex – 如何处理Actionscript中的Number精度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将BigDecimal对象用BlazeDS序列化为Actionscript。一旦他们将Actionscript作为Number对象,它们的值就像:

140475.32变成140475.31999999999998

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

解决方法

这是我的问题的通用解决方案(我有 blogged about this here):
var toFixed:Function = function(number:Number,factor:int) {
  return Math.round(number * factor)/factor;
}

例如:

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

>乘以0.12345678乘10;那给我们1.2345678。
>当我们回合1.2345678时,我们得到1.0,
>最后,1.0除以10等于0.1。

另一个例子:

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

>乘以1.7302394309234435乘以10000;这给了我们17302.394309234435。
>当我们轮到17302.394309234435我们得到17302,
>最后,17302除以10000等于1.7302。

编辑

基于匿名答案below,有一个很好的简化方法的参数,使精度更直观。例如:

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

注:我在这里添加了这里,以防万一有人将此视为答案,不会向下滚动…

猜你在找的Flex相关文章