C# 如何在2秒内增加精度c

C# 如何在2秒内增加精度c,c#,C#,我只是想知道如何增加2秒的精度。目前,我的代码按照我希望的方式工作,但我希望增加2000毫秒的精度 [TestMethod] public void LocationNameSearch() { // Create new stopwatch. Stopwatch stopwatch = new Stopwatch(); // Begin timing. stopwatch.Start(); // Import the search method. S

我只是想知道如何增加2秒的精度。目前,我的代码按照我希望的方式工作,但我希望增加2000毫秒的精度

    [TestMethod]
    public void LocationNameSearch()
    {


// Create new stopwatch.
Stopwatch stopwatch = new Stopwatch();

// Begin timing.
stopwatch.Start();

// Import the search method.


    System.Threading.Thread.Sleep(2000);



// Stop timing.
stopwatch.Stop();

//Assert
Assert.IsTrue(stopwatch.ElapsedMilliseconds < 3000, **2000**);


}

如果您的意思是希望在特定值上和下的范围为2000毫秒,那么可以使用以下命令检查经过的毫秒是否在3000的2000毫秒之内

Assert.IsTrue(stopwatch.ElapsedMilliseconds <= 3000 + 2000
              && stopwatch.ElapsedMilliseconds >= 3000 - 2000
);

如果你的意思是最小刻度是2000,那么你应该这样做

var lowprec = (stopwatch.ElapsedMilliseconds/2000)*2000; // notice the integer division

if(lowprec < 3000)
{
    //pass
}
else if(lowprec < 5000)
{
    //warn
}
这里假设经过的时间是3542毫秒。lowprec因其最高精度而成为2000,并将通过

如果经过的时间为4032毫秒,则lowprec变为4000,然后发出警告


但如果我是你,我会正常比较结果。在编程中,我们没有50%正确50%错误。这没有道理。我们只有100%正确或100%错误。

我有点不清楚。增加2000ms的精度是什么意思?你的意思是ElapsedMillesons是2000+-2000ms?好的,我的意思是,我希望它所用的时间少于3秒,我可以控制。但我想要一点路易。我想我可以增加到5秒。这将解决问题。也许我需要一个范围。因此,如果少于3秒,则为通过。如果在3-5之间,则抛出警告,高于5则为失败。这有什么意义吗?@Peter:有道理,但我不一定认为这是个好主意。单元测试应该通过或者失败。他们不应该有一个不确定的中间立场。请注意,这是我的观点,我绝不是单元测试专家:正如Chris所说,一般的观点是一个单元测试应该通过或者失败,但是你可以做两个测试,都用不同的阈值调用同一个测试,并命名它们,这样一个测试就表明它不是关键的。也就是说,您可以使用Assert.Inconclusive生成警告:ifstopwatch.elapsedmillesons>5000 Assert.Fail;否则,如果StopWatch.elapsedMill Seconds>3000断言。不确定;我想这正是我需要的。我的一个问题是,这与增加5000毫秒是一样的吗?值得注意的是,对于给定的代码,逻辑>=3000-2000的第二部分是多余的,因为对于thread.sleep 2000,我不希望它小于1000。如果这段代码运行得很快,这实际上是一个问题吗?我不认为这应该是一个失败的条件…是的,如果它在0-3000之间,那么它通过了3000-5000,那么它是一个潜在问题的迹象,然后5000加上它是一个失败。如果有办法抓住这三个领域,那就太棒了。请注意,我最终会将一种方法应用到睡眠的位置。这只是对代码进行初始测试。@peter的问题是添加5000毫秒是否正确。嗯,听起来你想在现实中,如果你有两个不同的事情要做?就我而言,断言本身只知道失败或成功aware@Peter我对答案进行了编辑,使其包含0-3000个无需执行的操作、3000+警告和可能的错误以及>5000个错误。这非常棒。我明白你的意思,你不希望结果有任何歧义。要么通过,要么失败。@Peter是的。这就是我的意思。我建议你把精度定在500而不是2000。所以它只会一直持续到3499年。假设条件是
var lowprec = (stopwatch.ElapsedMilliseconds/2000)*2000; // notice the integer division

if(lowprec < 3000)
{
    //pass
}
else if(lowprec < 5000)
{
    //warn
}