Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Débuter
Débuter Forum d'entraide pour débuter avec Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/09/2004, 10h38   #1
Invité régulier
 
Inscription : avril 2003
Messages : 51
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 51
Points : 8
Points : 8
Envoyer un message via AIM à dudux
Par défaut [delphi] arrondi désarrondi ??

Bonjour !

J'ai un champs prix FLOAT que je dois renseigner moi meme. J'écris dans ce champs 12,4 et lorsque j'insert dans ce champs la valeur 12,4 et que je poste la donnée, tout marche.... Parcontre quand je reviens, le champs n'est plus égal à 12,4 mais à 12,399999999999999....

Que se passe t - il ?

Merci
dudux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2004, 14h38   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Il se passe ce qu'il doit se passer avec un FLOAT. Les floats sont à utiliser pour les calculs scientifiques et non pour les chiffres de type compta...

C'est lié à la façon d'encoder le float en binaire.
Si vous arrondissez la valeur lue vous retomberez à votre 12.4. Mais ce n'est pas la solution...

Donc pour en revenir à votre probleme qui n'en est pas un, si vous voulez enregistrer des chiffres sans qu'ils soient arrondis il faut utiliser DECIMAL ou NUMERIC.

Ce n'est pas un probleme lié à interbase, mais un probleme purement informatique qui est bien connu. On le retrouvera donc dans tous les languages que se soit Delphi ou autre.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2004, 14h57   #3
Invité régulier
 
Inscription : avril 2003
Messages : 51
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 51
Points : 8
Points : 8
Envoyer un message via AIM à dudux
merci ! j'ai mis un decimal ça marche au poil !!
dudux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2006, 18h01   #4
fab
Nouveau Membre du Club
 
Inscription : juillet 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 44
Points : 34
Points : 34
Salut,

Je tape directement :
Code :
1
2
3
4
5
6
7
8
9
 
SELECT 
  12.05 - 12 , 
  cast((12.05 - 12) AS decimal(10,2)),
  7.95 -7 
FROM 
  travaille 
WHERE 
  numtrav = 547
et j'obtiens :

0.0500000000000070 | 0.0500000000000070 | 0.95

As-tu une explication ???? (et une solution...)

Merci
fab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2006, 23h32   #5
SLE
Membre chevronné
 
Avatar de SLE
 
Homme Serge LESPAGNARD
Consultant informatique
Inscription : janvier 2004
Messages : 588
Détails du profil
Informations personnelles :
Nom : Homme Serge LESPAGNARD
Âge : 38
Localisation : Belgique

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : janvier 2004
Messages : 588
Points : 732
Points : 732
avec quel sgbdr ? Sous firebird 1.5 ça fonctionne très bien et le résultat est correct.

J'obtiens bien 0.05|0.05|0.95

@+
SLE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2006, 11h08   #6
fab
Nouveau Membre du Club
 
Inscription : juillet 2003
Messages : 44
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 44
Points : 34
Points : 34
La version que j'utilise c'est Interbase Server 5.5.0.742.

Pour revenir à mon problème, je cré un champ temporaire dans ma table en decimal (15,2) lorsque je le cast en char(5) je retrouve une parfois une 3ème decimale
exemple 7.77 -> 7.767.

Je ne trouve pas de fonction d'arrondi. Je suis dans la m...

En fait je veux convertir des heures en mn en heures en centieme, mais ces heures en mn sont stockées sous un type char(5).

Quelqu'un a t-il une idée ? Merci
fab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2006, 13h22   #7
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
il n'y a aucune fonction d'arrondie toute faite.

2 solutions: 1) par multiplication/cast/division ou via une udf

pour la convertion des heures stockées dans une chaîne: il faut extraire les données de la chaîne (encore des udf) convertir en valeur et le reste sont des multiplications/divisions.
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h31.


 
 
 
 
Partenaires

Hébergement Web