Enregistrer chiffre à virgules mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Enregistrer chiffre à virgules mysql

Re: Enregistrer chiffre à virgules mysql

par Mazarini » 14 mars 2012, 15:19

Si je puis me permettre, il est plus simple de gérer les montants en centime dans les variables interne et dans la base de donnée et de ne faire la transformation en € uniquement pour l'affichage et la saisie.
Comme avantage :
- pas de traitement lors des lectures et écriture en base de données
- moins de problèmes d'arrondis dans les calculs.

Re: Enregistrer chiffre à virgules mysql

par toxic » 14 mars 2012, 13:29

moi j'utilise la fonction replace en fin de calcul:

select replace('XXX.XX', '.', ',')
->XXX,XX
Comme ça il m'affiche le nombre au format XXX,XX
Par contre plus question de faire des calculs avec la valeur par la suite sauf si comme moi tu en as besoin pour faire un export sur une version française d'excel qui ne prend que les formats XXX,XX comme nombre...

Re: Enregistrer chiffre à virgules mysql

par moogli » 09 juin 2011, 17:59

ben oui php ne connais pas non plus la virgule comme séparateur décimal :)

Re: Enregistrer chiffre à virgules mysql

par sirakawa » 09 juin 2011, 17:50

évidemment si on insère des nombres à point, ça fonctionne...

Re: Enregistrer chiffre à virgules mysql

par moogli » 09 juin 2011, 17:11

Je viens de vérifier : la cause en est que mysql ignore les nombres avec virgule, quel que soit le format utilisé:
float, float(11,6), numeric (7,2), decimal (7,2)
hum ça m'étonne, et que fait on de la doc sur les types numérique ? http://dev.mysql.com/doc/refman/5.0/fr/ ... types.html ?

et je viens de tester (version 5.5.11) avec
create table virgule (
id int not null auto_increment,
virgule numeric (7,2) default 0,
chiffre float(7,2) default 0,
primary key(id)
)engine=myisam;
Query OK, 0 rows affected (0.09 sec)

mysql> describe virgule;
+---------+--------------+------+-----+---------+----------------+
| Field   | Type         | Null | Key | Default | Extra          |
+---------+--------------+------+-----+---------+----------------+
| id      | int(11)      | NO   | PRI | NULL    | auto_increment |
| virgule | decimal(7,2) | YES  |     | 0.00    |                |
| chiffre | float(7,2)   | YES  |     | 0.00    |                |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.29 sec)

mysql> insert into virgule values (null,12.8,25.45);
Query OK, 1 row affected (0.00 sec)

mysql> insert into virgule values (null,12.8,25.45),(null,12.64,4528.126),(null,456789464,456.0);
Query OK, 3 rows affected, 1 warning (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 1

mysql> select * from virgule;
+----+----------+---------+
| id | virgule  | chiffre |
+----+----------+---------+
|  1 |    12.80 |   25.45 |
|  2 |    12.80 |   25.45 |
|  3 |    12.64 | 4528.13 |
|  4 | 99999.99 |  456.00 |
+----+----------+---------+
4 rows in set (0.00 sec)
pas de soucis ça passe nikel, il faut se rappeler que la décimal chez les anglo-saxons c'est le point et pas la virgule (d'où la fonction, qui en fonction de la local remplace les virgule par les points et vice versa (ben oui il utilise la virgule en séparateur de millier ...)

Re: Enregistrer chiffre à virgules mysql

par sirakawa » 09 juin 2011, 16:28

Je viens de vérifier : la cause en est que mysql ignore les nombres avec virgule, quel que soit le format utilisé:
float, float(11,6), numeric (7,2), decimal (7,2)

je ne vois que de mettre ces valeurs dans un champ texte, puisque de toute façon elles ne sont pas des nombres pour php...
ou de tenter ceci dans un recoin de la doc php:

setlocale(LC_ALL, 'bg_BG', 'bgr_BGR'); //ne pas me demander ce que ça veut dire, j'ai la flemme de chercher
function number2db($value)
{
$larr = localeconv();
$search = array(
$larr['decimal_point'],
$larr['mon_decimal_point'],
$larr['thousands_sep'],
$larr['mon_thousands_sep'],
$larr['currency_symbol'],
$larr['int_curr_symbol']
);
$replace = array('.', '.', '', '', '', '');

return str_replace($search, $replace, $value);
}

M. B.

Re: Enregistrer chiffre à virgules mysql

par Mazarini » 09 juin 2011, 11:03

Bonjour,

Pour limiter les problèmes avec les montants 12.45 et 12,45 ou les problèmes d'arrondis lié au format réel, j'ai pris l'habitude de travailler en centime et de gérer les passages Euro/centime à l'affichage et à la saisie via 2 fonctions.

Sauf erreur de ma part,
2.1 * 2 => 4.2
2 * 2.1 => 4 (Entier * réel => entier ?)
2.0 * 2.1 => 4.2

Malheureusement je ne peux pas vérifier actuellement.

Re: Enregistrer chiffre à virgules mysql

par Jonathan » 08 juin 2011, 16:24

Bonjour,

Le problème vient de ton "3,2". Tu lui indiques qu'il faut deux chiffres après la virgule, ça c'est bon. Mais par contre, tu lui indiques qu'il y a au maximum 3 chiffres (DONT deux décimales). Il ne reste alors plus qu'un caractère, il te met le max, càd 9.

En gros, je pense qu'en mettant "4,2", tu pourras saisir des prix à 4 chiffres au total, décimales comprises (donc ton 33,58 devrait passer, mais si tu as un prix supérieur à 100, genre 123,45, ça te mettra 99,99).

N'hésite pas à me dire si je ne suis pas clair =P~

Enregistrer chiffre à virgules mysql

par fabrice88250 » 08 juin 2011, 15:52

Bonjour,
j'essai d'enregistrer dans ma base de données des montants au formats xxx,xx.
j'ai donc un champs prix fans le type est float et a pour valeur 3,2 et UNSIGNED car je voudrai recuperer les prix avec maxi 3 chiffres et 2 decimals.

lorsque j'envoi par exemple 33,58 dans ma base de données au lieu d'avoir 33,58 j'ai 9.99 qui s'enregistre.

Savez vous comment je peut resoudre se petit probleme ?

Merci