我有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
N.B.我在这里添加了它,以防万一有人将其视为答案并且不会向下滚动...
关于apache-flex - 如何处理Actionscript中的数字精度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/632802/