var f:double x:integer; begin f:=1.2322131; x:=trunc(f); x:=x+(x mod 2); end;
随便写了一个,没有仔细测试,你测试一下吧: 暂时用了一个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;
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;
x:=round(x)+(round(x) mod 2);
好像看错题目了,以为是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;
x:integer;
begin
f:=1.2322131;
x:=trunc(f);
x:=x+(x mod 2);
end;
暂时用了一个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;
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;
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;
2.01就不行了
那就取整后再整除2再乘2在+2就行了
(trunc(i) div 2)*2+2还是意思是大于4小于8等于8,大于8小于16等于16?