【发布时间】:2021-04-19 16:05:14
【问题描述】:
我有一个问题。在此代码中,一步时间和循环时间计算为 0。它不计算一分钟前的秒数。但是,当它是 1 分钟时,它会计算分钟。但我们希望它单独计算。我们在哪里犯错了?
30秒完成一分钟,60秒完成1分钟。
StepPerMinute 仅在完成一分钟后才应响应,否则它应落入 cath 块,但我遇到了问题。
AStepDuration 必须每秒计算一次,但 1 分钟后开始计算,然后返回零。
循环时间总是为零。
if (stepCount == 1)
{
firstStepTime = DateTime.Now;
}
else if (stepCount > 1)
{
DateTime stepTime = DateTime.Now;
var result = stepTime.Subtract(firstStepTime);
var totalMinutes = Convert.ToInt16(result.TotalMinutes);
totalSeconds = Convert.ToInt16(result.TotalSeconds);
try
{
stepsPerMinute = Convert.ToInt16(stepCount / totalMinutes);
AStepDuration = (Convert.ToDouble( totalSeconds ) / stepCount);
CycleTime = totalSeconds * (2 / stepCount);
}
catch (DivideByZeroException)
{
stepsPerMinute = stepCount;
}
Console.WriteLine("Total time: {0}", totalMinutes+"dk");
Console.WriteLine("Total second : {0}", totalSeconds+"sn");
Console.WriteLine("Steps Per Minute(Cadence): {0}", stepsPerMinute +"step/min");
Console.WriteLine("A Step Duration: {0}", AStepDuration);
Console.WriteLine("Cycle Time: {0}", CycleTime + "sn");
}
【问题讨论】:
-
我非常不清楚“它不计算一分钟前的第二秒”是什么意思。如果您可以提供minimal reproducible example,帮助您会容易得多。 (顺便说一句,我还强烈建议您检查零作为除数,而不是捕获 DivideByZeroException。)
-
另外,请检查您的类型以确保您没有进行不必要的转换/转换。例如,
result.TotalSeconds是双精度型,但您要转换为Short,只是为了立即转换回双精度型。 -
所有不必要的转换的副作用是您可能以整数除法结束。
-
@JonSkeet 它仅在经过一分钟后才开始计算步长持续时间(BirAdİmSüresi)。它需要以秒为单位计算,但它总是在 1 分钟结束之前给我结果 0。我不完全理解你的建议。我应该如何编写 Dividedbyzero 异常。可以在示例代码中展示一下吗?
-
不,因为恐怕代码的整个目的目前还不清楚。同样,我强烈建议您创建一个 minimal reproducible example 并阅读 codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question 以获取有关编写好问题的建议。 (我还建议确保所有变量名称都是英文,以解决您的 Stack Overflow 问题 - 但您可能会发现您并不需要当前拥有的所有变量。)