我使用unity3d引擎在C#中进行了测试。
像这样:float dt = 22.05f + 0.05f;
dt
值应为22.1f,但我在VS2015中调试dt值,dt值为22.0999985f。我不知道为什么它不是我预期的正确值。
答案 0 :(得分:0)
因为浮点数是二进制的 - 您无法准确表达每个十进制数。不在分数方面,它必须由二进制的部分构成:1 / 2,1 / 4,1 / 8等。
.1(1/10)只能近似。
这导致了各种各样的小问题,程序员 - 主要是那些拒绝通过阅读详细解释事物的书籍来学习编程的人 - 会陷入其中。
另一个项目是你永远不应该将浮点数与常数进行比较 - 如果计算浮点数,它可能会略微关闭。您总是比较两个值之间的差异是否小于给定的小ε(Abs(a-b))