flex – 如何处理Actionscript中的Number精度?
发布时间:2020-12-15 02:13:31 所属栏目:百科 来源:网络整理
导读:我将BigDecimal对象用BlazeDS序列化为Actionscript。一旦他们将Actionscript作为Number对象,它们的值就像: 140475.32变成140475.31999999999998 我该如何处理?问题是如果我使用精度为2的NumberFormatter,则该值将截断为140475.31。有任何想法吗? 解决方
我将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。 另一个例子: trace(toFixed(1.7302394309234435,10000)); //1.7302 >乘以1.7302394309234435乘以10000;这给了我们17302.394309234435。 编辑 基于匿名答案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 注:我在这里添加了这里,以防万一有人将此视为答案,不会向下滚动… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |