Actionscript3的Number类型计算精度问题
看下面的代码:
1var n1:Number = 0.7;
2var n2:Number = 0.4;
3trace(n1 - n2);
4//输出 0.29999999999999993
简单说,就是两个一位小数相减,差为何不是一位小数?
经测试,乘法也有同样的问题。
遛狗找到了Flex团队的一个回复(要翻墙):http://old.nabble.com/Float-number-calculation-in-AS3-td18447329.html
从回复看,AS3的Number与JAVA或C++的double类似,采用二进制分数而非十进制分数保存浮点部分,因此会导致不够精确。这是语言的设计思路所致。当然,从另一个思路看,它也是个BUG。
或许AS3引入double和float类型后会解决这个问题吧……
AS3's Number type, like Java's or C++'s 'double' type, store
floating-point values using binary fractions, not decimal fractions, so
there is some loss of precision occuring. There is no fractional-decimal
type in AS3.I'll leave it to folks in the developer community working on financial
applications to explain how they work around this limitation.Gordon Smith
Adobe Flex SDK Team
- 文章ID:1186
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/actionscript3-number-precision/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。