比较大数除以公模的更优雅的方法

More elegant way of comparing large numbers divided by a common modulus

我有这个时间滴答的比较,但我只想知道滴答等于某个粒度。为此,我想出了一个想法,将刻度除以一个公共模数,减去余数并比较剩下的内容。

long value1 = DateTime.UtcNow.Ticks;
long value2 = 8884736516532874;

Assert.IsTrue((value1 - value1 % 1000)==(value2 - value2 % 1000));

我相信一定有更优雅、更好的方法来做到这一点。

我认为条件等于 值 1 /(10^11) == 值 2/(10^11)

比较不准确是很常见的事情,尤其是在处理浮点数时,例如 float

在您的情况下,您可以通过计算两个值的差异并检查它是否小于预定义的 epsilon 来实现相同的目的:

var epsilon = 1000;
Assert.IsTrue(Math.Abs(value1 - value2) < epsilon);

根据您的评论

I know that both values will be within same date, same hours and within 10 minute lag between each other

因此您可以更进一步,直接比较日期:

var difference = date1.Subtract(date2);
Assert.IsTrue(Math.Abs(difference.TotalMinutes) < 10);