cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 15 janv. 2006 à 22:06
Dans l'unité Math, on trouve (comme à peu près dans tous les langages) la fonction Sign :
Utilisez Sign pour tester le signe d'une valeur numérique.Sign renvoie
0 si AValue vaut zéro.
1 si AValue est supérieure àzéro.
-1 si AValue est inférieure àzéro.
A moins que tu tiennes absolument à restreindre la portée de -999999 à +999999.
Question : dans ton code, quel résultat renvoie ta fonction si x est en dehors des valeurs acceptées dans la structure case, hum ?
<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 16 janv. 2006 à 04:20
on aurais pus aussi, si Sign n'existais pas faire (attention fonction pure bricolage) :
function IsNegatif(const value : integer) : boolean;
var s : string[11];
begin
result := false;
s := IntToStr(value);
if s[1] = '-' then result := true;
end;
ou encore
function IsNegatif(const value : integer) : boolean;
begin
result := false;
if pos('-',IntToStr(value)) <> 0 then result := true;
end;
ou encore (et surement la plus propre)
function IsNegatif(const value : integer) : boolean;
function Sign(const AValue: Integer): TValueSign; overload;
function Sign(const AValue: Int64): TValueSign; overload;
function Sign(const AValue: Double): TValueSign; overload;
implementation
function Sign(const AValue: Integer): TValueSign;
begin
Result := ZeroValue;
if AValue < 0 then
Result := NegativeValue
else if AValue > 0 then
Result := PositiveValue;
end;
function Sign(const AValue: Int64): TValueSign;
begin
Result := ZeroValue;
if AValue < 0 then
Result := NegativeValue
else if AValue > 0 then
Result := PositiveValue;
end;
function Sign(const AValue: Double): TValueSign;
begin
if ((PInt64(@AValue)^ and $7FFFFFFFFFFFFFFF) = $0000000000000000) then
Result := ZeroValue
else if ((PInt64(@AValue)^ and $8000000000000000) = $8000000000000000) then
Result := NegativeValue
else
Result := PositiveValue;
end;
<hr size="2" width="100%">La theorie c'est quand on sait tout, mais que rien ne fonctionne.
La pratique c'est quand tout fonctionne, mais que personne ne sait pourquoi.
<hr>
cs_ManChesTer
Messages postés374Date d'inscriptionvendredi 20 octobre 2000StatutModérateurDernière intervention15 janvier 2021 16 janv. 2006 à 23:04
Arf y à bcps plus simple comme unit
type TnegValue = (VlPositive,VlNegative,VlZero);
Function IsNeg(Const AValue : VARIANT):TNegValue;
begin
Result:=VlZero;
if Avalue<0 then
Result:=VlNegative
else if avalue>0 then
Result:=VlPositive;
end;
Procedure TForm1.Button1Click(Sender: TObject);
Var vl : Double;
c : integer;
begin
val(edit1.Text,vl,c);
if c=0 then
case isneg(Vl) of
VlPositive : Caption:='The value is Positive';
VlNegative : Caption:='The value is Negative';
VlZero : Caption:='The value is Null';
end;
end;