每隔 10% 到 100% 输入一个代码分支

本文关键字:一个 代码 分支 100% 输入 每隔 | 更新日期: 2023-09-27 18:18:46

我可以想到一些非常复杂的循环和嵌套循环方法来解决这个问题,但我试图比这更专业。

我的情况是我需要每百分之十输入一段代码,但它并没有按预期工作。它输入了大约每个百分比的代码,这是由于我的代码,但我缺乏知道如何更改它的知识。

int currentPercent = Math.Truncate((current * 100M) / total);
//avoid divide by zero error 
if (currentPercent > 0)
{
   if (IsDivisible(100, currentPercent))
   {
     ....my code that works fine other than coming in too many times
   }
 }

上面引用的帮助程序,其中有问题:

private bool IsDivisible(int x, int y)
{
  return (x % y) == 0;
}

所以很明显它应该工作。Mod 消除了 3 的 currentPercent 但 1 和 2 通过,而实际上我不想要一个真正的值,直到 currentPercent = 10,然后直到 20 才再次出现......等等。

谢谢你,我为基本问题道歉

每隔 10% 到 100% 输入一个代码分支

Mod 只会捕获您的间隔的确切出现次数。 尝试跟踪您的下一个里程碑,您将不太可能错过它们。

const int cycles = 100;
const int interval = 10;
int nextPercent = interval;
for (int index = 0; index <= cycles; index++)
{
    int currentPercent = (index * 100) / cycles;
    if (currentPercent >= nextPercent)
    {
        nextPercent = currentPercent - (currentPercent % interval) + interval;
    }
}

我可能会误解你,但似乎你正在尝试做一些非常简单的事情,比它需要的更复杂。这个呢?

for (int i = 1; i <= 100; i++)
{
    if (i % 10 == 0)
    {
        // Here, you can do what you want - this will happen 
        // every ten iterations ("percent")
    }
}

或者,如果您的整个代码从其他地方进入(因此此范围内没有循环(,则重要的部分是i % 10 == 0

if (IsDivisible(100, currentPercent))
   {
     ....my code that works fine other than coming in too many times
   }

尝试将 100 更改为 10。而且我认为你的x和y也是反向的。

您可以使用谷歌计算器尝试一些示例操作。

(20 mod 10( = 0

不确定我是否完全理解,但我认为这就是你想要的?您还颠倒了代码中模数的顺序(100 mod 百分比,而不是相反(:

int currentPercent = current * 100 / total;
if (currentPercent % 10 == 0)
{
    // your code here, every 10%, starting at 0%
}

请注意,这种方式的代码只有在保证达到每个百分比标记的情况下才能正常工作。如果你可以从19%跳到21%,那么你需要跟踪上一次的百分比,看看你是否超过了10%的标记。

试试这个:

for (int percent = 1; percent <= 100; percent++)
{
    if (percent % 10 == 0)
    {
        //code goes here
    }
}

根据您增加 % 值的方式,这可能有效也可能不起作用 % 10 == 0 .例如,从 89% 跳到 91% 将有效地跳过代码执行。您应该存储上次执行的值,在本例中为 80。然后检查间隔是否为>= 10,因此 90 和 91 都可以。