我想把大于0小于等于2的数让它为2,大于2小于等于4的数让它为4,依此类推,请问怎么做

解决方案 »

  1.   

    var f:double
        x:integer;
    begin
      f:=1.2322131;
      x:=trunc(f);
      x:=x+(x mod 2);
    end;
      

  2.   

    随便写了一个,没有仔细测试,你测试一下吧:
    暂时用了一个max来表示一个上限,最多可以转换2的max次方的数,这样可以减少循环次数
    这里给的是10000,如果2的10000次方不能满足你的要求就再给大一点,自己调整。procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
      j: extended;
    const
      max: integer = 10000;
    begin
      j := 123.777;
      for i:=0 to max do
      begin
        if ((j>=power(2, i)) and (j<power(2, i+1))) then break;
      end;
      if i=max+1 then
        ShowMessage('Error')
      else
        ShowMessage(FloatToStr(power(2, i+1)));
    end;
      

  3.   

    var f:double
        x:integer;
    begin
      f:=1.2322131;
      if (f-(trunc(f))>0 then begin
        x:=trunc(f)+1
        x:=x+(x mod 2);
      end else begin
        x:=f;
        x:=x+(x mod 2);
      end
    end;
      

  4.   

    x:=round(x)+(round(x) mod 2);
      

  5.   

    好像看错题目了,以为是0到1之间的变为1,1到2之间的变为2,2到4之间的变为4呢改一下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
      j: extended;
    begin
      j := 123456.777;
      for i:=0 to trunc(j)+1 do    
        if ((j>=2*i) and (j<2*(i+1))) then break;
      if i=trunc(j)+2 then
        ShowMessage('Error')
      else
        ShowMessage(FloatToStr(2*(i+1)));
    end;
      

  6.   

    x:=round(x)+(round(x) mod 2);
    2.01就不行了
      

  7.   

    最好用Round(i/2+0.4999999999999999999)*2看你的小数的精确度,保证0.4999999999999999999比你的小数的精确度高一点就可以了
      

  8.   

    楼住的依次类推的意思是直大于4小于6的等于6,依次类推是么?
    那就取整后再整除2再乘2在+2就行了
    (trunc(i) div 2)*2+2还是意思是大于4小于8等于8,大于8小于16等于16?