Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 088 fois - Téléchargée 39 fois
(* ************************************************************************** *) (* FUNCTION StrF_ToValue *) (* *) (* Retourne une valeur réelle a partir d'une chaine avec . ou , *) (* comme séparareur *) (* *) (* ************************************************************************** *) Function StrF_ToValue ( Const Chaine : String ) : double; Var DecSeparator : Char; S : String; I : Integer; Begin (* sauvegarde séparateur des options windows *) DecSeparator := DecimalSeparator; S := Chaine; Try (* Force le séparateur '.' *) DecimalSeparator := '.'; (* Si on trouve le séparateur '.' *) IF Pos(DecimalSeparator, S) > 0 THEN Begin Try Result := StrToFloat (S); Except (* Si erreur de conversion *) Raise; End; End Else Begin (* Si on trouve le séparateur ',' *) I := Pos(',', S); (* On le remplace par '.' *) IF I > 0 THEN S[I] := DecimalSeparator; Try Result := StrToFloat (S); Except (* Si erreur de conversion *) Raise; End; End; Finally (* rétabli séparateur des options windows *) DecimalSeparator := DecSeparator; End; End;
20 mai 2007 à 01:17
30 mars 2005 à 21:26
function StrToXtd(Chaine,DecSep :string):extended;
var L,K,i: integer;
R:extended;
begin
R:=0;
L:=Length(Chaine);
K:=Pos(DecSep,Chaine);
For i:=1 to L do
if Chaine[i] in ['0'..'9'] then R:=R*10.0 + StrToInt(Chaine[i]);
if K > 0 Then R:=R/IntPower(10,(L-K));
StrToXtd:= R;
end;
Evidement c'est incomplet, il manque la gestion des trucs genre 2.325E45, et des négatif (et des exposant négatif hein en plus), mais c'est vraiment aisé a rajouter.
9 mars 2005 à 13:34
Vous voulez pouvoir utiliser la virgule ou le point comme séparateur décimal en meme temps ?? sans modifier le système ?
Ne vous cassez pas la tête :
function StringToFloat(S: string): Extended;
begin
case DecimalSeparator of
'.': S:=StringReplace(S,',',DecimalSeparator,[]);
',': S:=StringReplace(S,'.',DecimalSeparator,[]);
end; // case.
Result:=StrToFloat(S);
end;
ou pour la version TRY:
function TryStringToFloat(S: string; out Into: Extended): Boolean;
begin
case DecimalSeparator of
'.': S:=StringReplace(S,',',DecimalSeparator,[]);
',': S:=StringReplace(S,'.',DecimalSeparator,[]);
end; // case.
Result:=TryStrToFloat(S,Into);
end;
Voila le code est assez explicite de lui même et c'est tout simple.
@ ++
Florent
7 mars 2005 à 09:54
Lol effectivement delphiprog j'ai été un peu vite. Mais c'est parceque en générale j'utilise la version qui renvoi true ou false. J'ai voulu faire une variante mais pas de chance planté.
Merci de me l'avoir fait remarquer.
David_SDI_O1 :
Je ne comprends pas pourquoi tu veux absolument utilisé les . ou , mais bon tu es libre de ton choix.
Le principal c'est que ca fonctionne comme dirais l'autre.
Allez bonne continuation à vous deux,
JMP77.
5 mars 2005 à 21:17
pourquoi au debut de mon programme je ne fait pas :
DecimalSeparator := '.' ?
Tout simplement parce que je voulais que la saisie soit validée avec '.' ou ',' et non pas limitée à une des deux possibilités
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.