我正在尝试在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中构建可用的计算器?
提前谢谢你, 阿德南
答案 0 :(得分:4)
欢迎使用IEEE 754浮点数。享受inaccuracies。如果要避免使用定点机制,请使用定点机制。
答案 1 :(得分:1)
您的结果是可以预期的,并且将在具有浮点数据类型的任何编程语言中观察到。计算机无法准确存储所有数字,这会导致边缘情况,例如您发布的情况。
答案 2 :(得分:0)
我认为大多数计算器显示的小数位数少于浮点数的精度。舍入到比您的精度水平更少的小数位应该可以缓解这类问题,但它不会解决所有问题。