浮点比较给出错误的结果和精度变化

时间:2019-03-20 12:15:28

标签: c++ visual-c++

我的版本号为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,但这可能不是正确的解决方法

请提出最佳方法

2 个答案:

答案 0 :(得分:2)

版本号本质上是整数。您已经有一个类,该类的主要版本应为整数,次要版本应为整数,并且比较运算符(这就是您要尝试的操作)。

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

在您的情况下,如果2.9比3.0会怎样?

答案 1 :(得分:1)

为什么不创建包含所传递版本信息的主要版本和次要版本的类,并添加在那里进行检查的逻辑。这个想法不是将其解析为float,而是将其用逗号分隔并将该信息视为int。