首页 > 解决方案 > 浮点比较给出错误的结果和精度变化

问题描述

我有版本号 1.1、1.2、1.3,我需要检查小于或大于 1.2 的版本,但是在调试时我得到的错误答案比预期的要好

    float versionNumber = versinInfo.toFloat();
    static float const VERSION_NUMBER(1.2);
    if(abs((versionNumber - VERSION_NUMBER) <= 0.001))
    {
      // do operation
    }

versionNumber 为 1.10000005,我虽然将检查从 0.001 更改为 0.0000005,但它可能不是正确的修复

请建议最好的方法

标签: c++visual-c++

解决方案


版本号本质上是整数。你已经有一个类,这个类应该有一个主要版本的整数值,次要版本的整数版本,以及比较运算符(这就是你想要做的)。

其他方案甚至还有第三个补丁整数,一个用于 alpha/RC 的字符串......在使用适当语义的类中正确实现这一点(即is_one_minor_version_away,在您正确测试的地方命名的方法只有一个小的版本更改)。

如果在你的情况下它是 2.9 对 3.0 会发生什么?


推荐阅读