使用“mod”运算符

时间:2011-04-02 20:46:48

标签: delphi math integer modulo

每当我需要在for循环中每隔300次迭代执行某个操作时,我就会尝试显示(有意义吗?)

这是代码中我想要做的,但不是我想要的方式:

for I := 0 to 2000 do
  Begin
   if I = 300 then
   DoAnAction;

   if I = 600 then
   DoAnAction

   if I = 900 then
   DoAnAction

   if I = 1200 ......... Same action all over, but I don't want to check all those conditions!
  End;

所以我被告知要使用mod运算符,这就是我的工作方式:

for I := 0 to 2000 do
 Begin
  if I mod 300 = 299 then
  DoAnAction;
 End;

然而,使用上述代码段的结果将执行299,599,899的操作....

如何使用Mod操作符在300,600,900 ......进行操作? (做if I mod 300 = 300没有用)

谢谢!

5 个答案:

答案 0 :(得分:10)

for I := 0 to 2000 do
 Begin
  if (I mod 300 = 0) and (I > 0) then
    DoAnAction;
 End;

虽然你以前的版本确实有意义,但我= 299是第300遍;)

编辑:I mod 300 = 300无效,因为mod运算符返回了devision的剩余部分,根据定义,它将在范围0..299

答案 1 :(得分:4)

mod运算符返回除法的其余部分。因此,如果您希望每300次迭代执行一次,请使用i mod 300 = 0

I mod 300 = 300没有意义,因为不能有300除以300的剩余部分。

答案 2 :(得分:4)

使用此:

if i mod 300 = 0

模数运算符返回除法的余数。

这是一个帮助你的例子。将TMemo放在空白的新表单上,并将其放在FormCreate evemt:

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
const
  Output = 'i mod %d = %d';
begin
  Memo1.Clear;
  for i := 0 to 10 do
    Memo1.Lines.Add(Format(Output, [i, i mod 5]));
end;

运行它,查看备忘录中的输出。

答案 3 :(得分:1)

尝试(I <> 0) AND ((I mod 300) = 0)

答案 4 :(得分:0)

This image display what to change

procedure TForm1.Button1Click(Sender: TObject); var i:REal; begin i:=strtofloat(edit1.Text); if i mod 5 = 0 then begin label1.Caption:='Кратно 5'; end else begin label1.Caption:='Не кратно 5'; end; end;