Actionscript 3数学不一致

时间:2010-02-06 13:42:56

标签: flex actionscript-3 math

我正在尝试在Flex / actionscript 3中构建计算器,但使用Math类有一些奇怪的结果:

trace(1.4 - .4); //should be 1 but it is 0.9999999999999999
trace(1.5 - .5); //should be 1 and it is 1
trace(1.444 - .444); //should be 1 and it is 1
trace(1.555 - .555); //should be 1 but it is 0.9999999999999999

我知道浮点数存在一些问题,但正如您所看到的,至少应该对我的所有示例都失败,我是对的吗?

如何在其他计算器中解决问题以及如何在Actionscript 3中构建可用的计算器?

提前谢谢你, 阿德南

3 个答案:

答案 0 :(得分:4)

欢迎使用IEEE 754浮点数。享受inaccuracies。如果要避免使用定点机制,请使用定点机制。

答案 1 :(得分:1)

您的结果是可以预期的,并且将在具有浮点数据类型的任何编程语言中观察到。计算机无法准确存储所有数字,这会导致边缘情况,例如您发布的情况。

Read up on floating point accuracy problems at Wikipedia

答案 2 :(得分:0)

我认为大多数计算器显示的小数位数少于浮点数的精度。舍入到比您的精度水平更少的小数位应该可以缓解这类问题,但它不会解决所有问题。