我使用BlazeDS将BigDecimal对象序列化为Actionscript.当它们作为Number对象访问Actionscript时,它们的值如下所示:
140475.32
变成了140475.31999999999998
我该如何处理这件事?问题是,如果我使用精度为2的NumberFormatter,则该值将被截断为140475.31
。有什么想法吗?
发布于 2009-10-09 05:17:57
对于任何感兴趣的人来说,这只是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
发布于 2009-09-22 20:29:17
我在ActionScript 3中使用了Number.toFixed(precision)
来做这件事: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));
发布于 2009-10-08 19:37:23
我把BigDecimal的Java转换成了ActionScript。我们没有选择,因为我们计算财务应用程序。
https://stackoverflow.com/questions/632802
复制相似问题