2013-04-30 2 views
1

Как я могу узнать, какое число ближе? скажем, мое значение «1», и у меня есть два варианта: A: = 1.6 и b: = 1.001Какое число ближе

В настоящее время вы просматриваете несколько цифр и получаете 0,1% +/- разницу и +/- 0,6 разницы. я просто не нужно, чтобы увидеть, какой ответ ближе к исходному значению .. код до сих пор ..

И ничего большим, код просто, чтобы остановить меня от делать их все вручную: D

procedure TForm1.Button1Click(Sender: TObject); 
var 
winlimit,test6high,test6low,test6,test1high,test1low,test1,value: double; 
begin 
value := 1.0; 
while value < 1048567 do 
    begin 
    test6high := value + 0.6 ; 
    test6low := value - 0.6 ; 

    test1high := (-0.1 * value)/100; 
    test1high := value - test1high; 

    test1low := (0.1 * value)/100; 
    test1low := value - test1low; 

    memo1.Lines.Add('value is '+floattostr(value)+': 1% High:'+floattostr(Test1high)+' 1% Low:'+floattostr(Test1low)); 
    memo1.Lines.Add('value is '+floattostr(value)+': 0.6 +/- '+floattostr(Test6high)+' 0.6 Low:'+floattostr(Test6low)); 
    memo1.Lines.Add(' '); 
    value := value*2; 
end 
end; 
+2

ли вы имеете в виду 'IfThen (абс (A-B) <абс (A-C), B, C)'? –

+0

плохо попробуйте и скажите ya..but не уверен, как это попробовать .. Где я добавляю текст в строки заметок, я просто хотел показать значение, которое ближе к оригинальной ценности, вместо того, чтобы показывать оба –

ответ

4

Я думаю, вы имеете в виду такую ​​функцию:

function ClosestTo(const Target, Value1, Value2: Double): Double; 
begin 
    if abs(Target-Value1)<abs(Target-Value2) then 
    Result := Value1 
    else 
    Result := Value2; 
end; 

При использовании IfThen из Math блока вы можете записать его более сжато:

function ClosestTo(const Target, Value1, Value2: Double): Double; 
begin 
    Result := IfThen(abs(Target-Value1)<abs(Target-Value2), Value1, Value2); 
end; 
+0

Ahh perfect, Я рекомендую использовать математический блок .., что IfThen хорошо, никогда не знал, что было там .. спасибо –

+0

@GelnMorse в современных языках это часть стандартного выражения if-then-else. Но так как Delphi глубоко внедрен в отчет Паскаля 1973 года и имеет режим выражения для IF и CASE, Borland решил преодолеть это с помощью набора функций RTL для большинства распространенных типов. –

Смежные вопросы