les nombres à virgule flottante? MySql

les nombres à virgule flottante? MySql - SQL/NoSQL - Programmation

Marsh Posté le 23-10-2003 à 12:24:00    

qu'elle est le meilleur typage a utiliser pour les nombres  a  virgule flottant avec MySql
Exemple pour des tarifs de produits
 
je suis un peu perdu entre
 
Float et Decimal ?
 
dans l'aide ca parle de precision et d'arrondi mais je saisi mal l'avanatge et les inconvenients de chacun
 
merci d'avance

Reply

Marsh Posté le 23-10-2003 à 12:24:00   

Reply

Marsh Posté le 23-10-2003 à 12:28:18    

en gros  
aucun prix ne doit etre arrondi
ceratin prix doiventa voir 4chiffres apres la virgule et d'autres 2
 
kel ets le meilleur type?
 
je pencherai pour decimal car je crois qu'il n'ya pas d'arrondi et que c'est considéré comme uen chaine , mais je demande confirmation
 
Ensuite comment faire en php pour tester si un chiffre saisi dans un formulaire est un nombre a virgule flottante?
 

Reply

Marsh Posté le 23-10-2003 à 12:37:16    

decimal en PHP  = 1.5
décimal SGBD =1,5
 
en fonction de se qu'on veut on est obligé soit meme de faire les modifications associés?
le passage de la varibale PHP dans la base MySql causerai un pb non?
;o)

Reply

Marsh Posté le 23-10-2003 à 13:40:23    

1- Choisi decimal
2- http://fr3.php.net/manual/fr/function.is-float.php
3- Décimal MySql : c'est le point(.) qui est utilisé.
Exemple :
INSERT INTO test set prod_id=26, prix=12345.12


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 23-10-2003 à 13:42:40    

Float va stocker ta variable sous forme d'une division d'entiers. C'est "pas précis" (pour les très gros montants ou les très petits montants, tu risque d'avoir des trucs style 199999999999.9999 au lieu de 200000000000.0000 ce qui fout le bronx.
 
Decimal quand à lui c'est un stockage à la façon "chaîne de caractère", c'est à dire qu'il va stocker les chiffres éxacts, âchant qu'il est de mémoire limité à plus de chiffres, donc c'est mieu.
 
Un champ décimal se déclare normalement decimal(13,4) ce qui veut dire que tu veux 13 chiffres dont 4 après la virgule (donc avec mon exemple tu montes jusqu'à "1 000 000 000 - 0.0001"

Reply

Marsh Posté le 23-10-2003 à 13:46:58    

merci merci a vous 2
donc c'est bon ca confirm mon choix de "decimal"  ;o)

Reply

Marsh Posté le 23-10-2003 à 13:49:54    

Mara's dad a écrit :

1- Choisi decimal
2- http://fr3.php.net/manual/fr/function.is-float.php
3- Décimal MySql : c'est le point(.) qui est utilisé.
Exemple :
INSERT INTO test set prod_id=26, prix=12345.12


 
is_float ne fonctionne pas
 
que je rentre 12.3 ou 12,3 il me detect jamais que c'est un float

Reply

Marsh Posté le 23-10-2003 à 13:50:36    

donc comment faire pour tester que la valeur dans un champ est un decimal? (mais avec une virgule pas le point)

Reply

Marsh Posté le 23-10-2003 à 13:51:31    

Bah tu fais un replace du point par une virgule :D

Reply

Marsh Posté le 23-10-2003 à 13:55:04    

MagicBuzz a écrit :

Bah tu fais un replace du point par une virgule :D


 
 :)  non je ne veux pas faire ca pour diverse raison  
je pourrais mais je veux pas (par choix et pour forcer ceux qui reference les produits a faire des saisis correct)
c'ets une contrainte que mon chef ma fait.
Par contre je doit bien tt tester ou sont les ereurs et les prévenirs  :D

Reply

Marsh Posté le 23-10-2003 à 13:55:04   

Reply

Marsh Posté le 23-10-2003 à 14:00:30    

et puis autre question ;o)
 
ya t-il une fonction PHP qui permet de savoir le nombre de chiffres apres la virgule?

Reply

Marsh Posté le 23-10-2003 à 14:34:56    

Il te faut une virgule, c'est bien çà !
 
Si oui, tu va devoir la changer en point pour l'insert en base.
 
En fait tu teste pas des nombres, mais des chaînes de caractères.
 
Donc exemple pour tester et/ou compter
 

$valeur = '1234,123';
$partie_entiere = 0;
$partie_decimale = 0;
if( preg_match( "/([0-9]+)[,]{1}([0-9]+)/", $valeur, $parties ) )
{
 $partie_entiere = $parties[1];
 $partie_decimale = $parties[2];
}
else
{
        // Erreur de saisie
}
$nombre = "$partie_entiere.$partie_decimale";
$nb_decimales = strlen( $partie_decimale );


Message édité par Mara's dad le 23-10-2003 à 14:35:51

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 23-10-2003 à 14:42:23    

Mara's dad a écrit :

Il te faut une virgule, c'est bien çà !
 
Si oui, tu va devoir la changer en point pour l'insert en base.
 
En fait tu teste pas des nombres, mais des chaînes de caractères.
 
Donc exemple pour tester et/ou compter
 

$valeur = '1234,123';
$partie_entiere = 0;
$partie_decimale = 0;
if( preg_match( "/([0-9]+)[,]{1}([0-9]+)/", $valeur, $parties ) )
{
 $partie_entiere = $parties[1];
 $partie_decimale = $parties[2];
}
else
{
        // Erreur de saisie
}
$nombre = "$partie_entiere.$partie_decimale";
$nb_decimales = strlen( $partie_decimale );




 
je te remercie  ;o)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed