如何将数字转换为下一个五的倍数?

mas*_*nix 1 c#

我正在编写一个程序,其中表单在关闭之前打开一段时间.我让用户以秒为单位指定时间.但我希望这可能是五个多变的.或者数字四舍五入到最接近的倍数.

如果输入1 - 4,则该值自动设置为5.如果输入6 - 10,则该值自动设置为10.

最大值为60,min为0.

我有什么,但我对这个逻辑不满意,因为它将它重置为10秒.

 if (Convert.ToInt32(maskedTextBox1.Text) >= 60 || Convert.ToInt32(maskedTextBox1.Text) <= 0)
                    mySettings.ToastFormTimer = 10000;
                else
                    mySettings.ToastFormTimer = Convert.ToInt32 (maskedTextBox1.Text) * 1000;
Run Code Online (Sandbox Code Playgroud)

Ran*_*pho 22

使用模数运算符

if(num % 5 == 0)
{
  // the number is a multiple of 5. 
}
Run Code Online (Sandbox Code Playgroud)

  • 如果数字不是5的倍数,并且您想要转到下一个最接近的倍数,则执行:num + =(5 - (num%5)).实际上,不是将数字测试为5的倍数,而是可以这样做,并知道结果将是值,或下一个倍数. (2认同)

mor*_*eus 6

那这个呢:

int x = int.Parse(maskedTextBox1.Text)/5;
int y = Math.Min(Math.Max(x,1),12)*5; // between [5,60]
// use y as the answer you need 
Run Code Online (Sandbox Code Playgroud)

  • 伙计们,为什么这么糟糕?x将具有除数.y的值将在{5,10,15,...,60}范围内.这问题不是问题吗? (3认同)
  • -1即使我经常试图避免这样做,我也不得不进行投票. (2认同)
  • 这是一种非常复杂的方法来确定某些东西是否可以被5整除.这就是模数运算符存在的原因.更不用说关于摆弄maskedTextBox1.Text值的部分....这也是UI特定的. (2认同)
  • 我试图帮助提出问题的人做他/她最终想做的事情.你读完整个问题了吗? (2认同)
  • @downvoters - 我认为你可能错了。Morpheus 提供了代码来准确执行 OP 在问题正文中所要求的操作。秒数间隔为 5,最小值 0,最大值 60。UI 参考与问题相关。我在投反对票时犯了同样的错误,但仔细观察后希望改变这个决定。 (2认同)
  • +1因为你解决了op所说的问题.被无法阅读问题的用户投票拒绝投票. (2认同)

Pat*_*ick 6

5 * ((num - 1) / 5 + 1)
Run Code Online (Sandbox Code Playgroud)

如果 c# 进行整数除法,应该可以工作。