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,但它可能不是正确的修复
请建议最好的方法
解决方案
版本号本质上是整数。你已经有一个类,这个类应该有一个主要版本的整数值,次要版本的整数版本,以及比较运算符(这就是你想要做的)。
其他方案甚至还有第三个补丁整数,一个用于 alpha/RC 的字符串......在使用适当语义的类中正确实现这一点(即is_one_minor_version_away
,在您正确测试的地方命名的方法只有一个小的版本更改)。
如果在你的情况下它是 2.9 对 3.0 会发生什么?
推荐阅读
- ios - 如何在 SwiftUI 中创建此视图?
- pandas - 如何将矩阵作为字符串转换为ndarray?
- python - 无法弄清楚为什么 soup.find_all() 返回一个空列表
- ruby-on-rails - 如何使用正则表达式从 Ruby 中的 str.scan 和 str.match 返回相同的结果
- python - 烧瓶注销特定用户的所有会话
- java - java DatagramSocket中如何发送对象不实现Serializable接口
- c++ - 旋转二维数组的最快方法
- r - 更改 r 中数字命名列的顺序
- java - 如何打印 LinkedHashMap
- java - 稳定的项目还应该使用 spring-boot-starter-* 吗?