Virgule flottante [Résolu]

Signaler
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
-
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009
-
Bonjour ami développeurs en delphi. Voici mon problème : dans ma base de données ACCESS j'ai un champs de type numérique (réel double format euro). Donc dans ma base j'ai des prix qui s'affichent bien avec 2 chiffres après la virgule. Seulement dans mon programme il n'affiche qu'un chiffre après la virgule (si le 2ème est un 0 : ex 1,50 s'affichera 1,5). Comment faire donc pour le 0 s'affiche également ?
Si quelqu'un a déjà eu se problème et qu'il l'a résolu ou quelqu'un serait susceptible de le résoudre se serait sympa de m'aider.
Merci à tous !

pseudoOM
A voir également:

8 réponses

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
aller je vais embetter encore une fois mon ami Jlen100 :



bonne solution mais :





utilisation de Format tout simplement



- en float



label1.caption := format('%.2f',[13.50]);



renvois : 13,50



- en chiffre monetaire (ajout automatique du symbole monaitaire des options regionnales de windows)



label1.caption : = format('%m',[13.50]);

renvois : 13,50 ?



- la meme avec float et directement le symbole :



label1.caption := format('%.2f ?',[13.50]);

renvois : 13.50 ?



- avec possibilitée de changer le symbole monetaire, l'ordre des
symbole/chiffre et ajout du separateur des milliers avec Numerique et
String :



label1.caption : = format(OrdreStr,[10453.5, Symbole]);



avec OrdreStr '%.2n %s' et Symbole '?' ... Renvois : 10 453,50 ?

avec OrdreStr '%s %.2n' et Symbole '£' ... Renvois : £ 10 453.50



et voila comment on rend totalement obsolete l'utilisation des autres fonction (Type)ToStr

faut dire j'ai tellement fait d'appli qui devait traiter des chiffres en textes que je suis passé maitre

dans l'utilisation de format... hehe
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

urtilise la fonction formatfloat

avec comme paramatre:0.00

var chaine:string;

valeur:extended;

begin

valeur:=1253.2633;

chaine:=formatfloat('0.00',valeur);

edit1.Text:=chaine;

end;

resultat= 1253,26

@+

jlen
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
foxi--> ça ne m'embête pas ta fonction est plus générale et la mienne plus explicite.

à chacun ses marottes

pour l'application de format j'évite simplement qu'à chaque fois il
faut que je me replonge dans l'aide pour me rappeler des parametres et
comme en général formatfloat me suffit et je n'aime pas trop me
compliquer la vie....



@+

jlen
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009

Merci pour vos réponses ! Je vais essayer vos solutions et je vous tiens au courant des résultats !

pseudoOM
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009

Vos solutions sont intéressantes mais le hic c'est que je travail dans un QuickReport et le problème est le suivant : au lieu de prendre la valeur numérique du champs, il prend l'intitulé de la colonne ! EX : QRDBText1 est relié à un dataset et un datafield 'sommeTotal' (donc sommeTotal s'inscrit dans le QRDBText1). Quand je fait QRep1.preview, QRDBText1 affiche 789,6. Mais QRDBText1.caption retournera 'sommeTotal' au lieu de 789,6 et c'est là que les problèmes commencent car quand je tente
var
somme: String;
sommeTot: Double;
begin
somme:=Form1.QRDBText1.caption;
sommeTot:=StrToFloat(somme); il rouspette à cet endroit en disant que sommeTotal n'est pas un nombre à vrgule flottante correct. Donc je ne peux pas continuer avec la solution du format !
Si quelqu'un à une idée il est le bienvenu !

pseudoOM
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
12
salut,

je ne vois pas ou est le probleme 789,6 est bien une chaine conforme

mais force decimalseparator:=','; sinon si decimalseparator='.' il te
provoque une erreur d'exécution mis à part cela je ne d'autre chose qui
pourrait provoqué une erreur.

@+

jlen
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
carrement bizare en effet....



si somme est bien une chaine representant un nombre de type Float .... devrais pas y'avoir de probleme.



tiens tente plutot un StrToFloatDef(somme,0.0);



ça eviteras l'erreur de convertion deja et tu pourras peut etre mieux cerné le probleme en voyant ce qui ce passe aprés.
Messages postés
173
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
30 janvier 2009

Ok j'ai résolu le problème (cela fait déjà un petit temps mais je n'ai pa eu le temps de le dire avant) ! En fait j'ai utilisé la solution de fOxi mais en passant par des DBEdit avant de copier la valeur dans un QRLabel ! Donc à cet endroit je n'utilise plus de QRDBText ! Merci encore !

pseudoOM