所以,我有两个双变量,我想将它们比较到小数点后 3 位。因此,对于变量(例如):
double x = 0.695999;
double y = 0.695111;
如果我检查 (x==y),它应该返回 true(因为两者都相等,直到小数点后 3 位)。谢谢!
您可以(ab)使用整数比较和截断:
int is_equal_3decplaces(double a, double b) {
long long ai = a * 1000;
long long bi = b * 1000;
return ai == bi;
}
正如@DavidRF 的基准所显示的那样,与计算绝对值相比,此解决方案的性能略有提高(约 40%)。
您实际上应该检查差异是否小于可预配置的小增量,除非您总是希望检查小数点后三位。例如:
#define epsilon ((double)0.000999)
bool is_approximately_equal(double x, double y)
{
return (abs(x - y) < epsilon);
}
请注意,C++ 上的 abs 具有用于 double 的 abs 版本。在 C 语言中,您必须对 -ve 值做一些事情。