更优雅的比较大数除以一个共同模数的方法。

问题描述 投票:-1回答:1

我有这个时间刻度的比较,但我只想知道刻度在一定的颗粒度内是相等的。为此,我想出了一个办法,就是用一个公共模数除以ticks,再减去剩余部分,然后比较剩下的部分。

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

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

我相信一定有更优雅、更好的方法。

c# datetime modulus
1个回答
0
投票

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

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

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

根据你的评论

我知道这两个值将在相同的日期、相同的时间内,并且彼此之间的差距在10分钟之内。

所以你可以更进一步,直接比较日期。

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

0
投票

我认为这个条件等于value1 (10^11) == value2(10^11)

© www.soinside.com 2019 - 2024. All rights reserved.