setlocale - PHP - Programmation
Marsh Posté le 03-08-2008 à 13:20:53
Utiliser number_format ?
Marsh Posté le 25-08-2008 à 14:00:15
C'est ce que j'utilise actuellement, mais auparavant mon "setlocale" était suffisant ??? C'est bizarre.
Marsh Posté le 25-08-2008 à 16:28:09
thierryR a écrit : C'est ce que j'utilise actuellement, mais auparavant mon "setlocale" était suffisant ??? C'est bizarre. |
En français le séparateur a toujours été la virgule.
Marsh Posté le 25-08-2008 à 21:16:36
OK, mais dans les champs numériques on a un problème. Comme le point n'existe plus, le chiffre est tronqué de ses décimales.
En conclusion Dj YeLL a raison. Il faut reformater les chiffres.
Marsh Posté le 25-08-2008 à 22:08:34
thierryR a écrit : OK, mais dans les champs numériques on a un problème. Comme le point n'existe plus, le chiffre est tronqué de ses décimales. |
je m'exprime peut-être mal - le séparateur indiquant dans un nombre qu'on passe aux décimales est en français bien la virgule.
Marsh Posté le 25-08-2008 à 22:12:53
Ta définition est tout a fait compréhensible. J'ai bien compris. La virgule est le séparateur requis. Ce que je soulignais c'est l'incompatibilité avec les champs numériques, qui demandent un point (only).
Marsh Posté le 25-08-2008 à 22:30:51
thierryR a écrit : Ta définition est tout a fait compréhensible. J'ai bien compris. La virgule est le séparateur requis. Ce que je soulignais c'est l'incompatibilité avec les champs numériques, qui demandent un point (only). |
quels champs numériques?
Marsh Posté le 25-08-2008 à 22:50:56
Ceci dépasse un peu le sujet php.
Quand j'additionne 2 variables une virgule apparait suivant la locale configurée.
Si je veux la placer dans une table mysql dans un champ numérique un tronquage se produit.
Marsh Posté le 26-08-2008 à 08:56:33
thierryR a écrit : Ceci dépasse un peu le sujet php. |
Alors le problème est peut-être plutôt ta manière de faire l'insertion dans la base - avec des requêtes paramétrées sur un champ numérique, php devrait utiliser la locale pour déterminer correctement la valeur à insérer...ou alors c'est un bug de php ou du connecteur mysql de php...
Marsh Posté le 26-08-2008 à 13:14:39
Étant plutôt bricoleur qu'informaticien, j'admets facilement que ma méthode est a revoir. J'ai tout à apprendre... Pour palier à ce nouveau problème je rajoute une ligne en php:
$mavar = number_format($mavar,2,'.',''); |
puis je continue ma procédure classique
mysql_query("REPLACE INTO..... |
et ça fonctionne.
Ce que je ne comprends pas, c'est que jusqu'ici tout allait bien. Maintenant il faut formater explicitement le champ avant enregistrement. D'un autre coté, ça rend l'application plus robuste.
Marsh Posté le 26-08-2008 à 13:39:26
thierryR a écrit : Étant plutôt bricoleur qu'informaticien, j'admets facilement que ma méthode est a revoir. J'ai tout à apprendre... Pour palier à ce nouveau problème je rajoute une ligne en php:
|
Tu as essayé avec des requêtes préparées ou pas? En bindant ta variable avec un type de données float, ça devrait marcher sans toucher à quoi que ce soit, ou alors php fait n'importe quoi...ce qui évidemment n'est pas exclu.
Marsh Posté le 26-08-2008 à 19:32:26
skeye a écrit : |
Heu... Là je ne comprends pas. Ce que je peux dire: Avant l'enregistrement, il y a une somme mathématique de 4 autres champs. C'est là que la virgule apparait.
skeye a écrit : |
Mes champs mysql sont de type float(8,2). Est-ce suffisant ?
Marsh Posté le 26-08-2008 à 22:42:40
thierryR a écrit : |
Non, la virgule n'est que la représentation textuelle du passage aux décimales, et n'apparait vraiment que quand tu demandes à représenter ton nombre comme une chaine de caractères. Ce qui est le cas si tu crées une chaine de caractères représentant ta requête pour l'exécuter, mais pas si tu utilises des requêtes préparées (il faut mysqli pour ça par contre).
regarde la doc de mysqli_prepare, mysqli_bind_param, etc. pour des exemples de requêtes préparées...
Marsh Posté le 31-07-2008 à 22:53:25
J'ai fais un programme en php, html.
En locale j'ai rentré ça:
setlocale(LC_ALL, 'fr_FR.ISO_8859-1', 'fr_FR','fr','fr','fra','fr_FR@euro');
La fonction strtoupper fonctionne très bien même avec des caractères accentués.
La ou réside un problème c'est avec le séparateur de décimal. J'ai une virgule au lieu d'un point. Du coup, mes champs numériques ne sont que partiellement remplis.
si je reprends la locale anglaise j'ai exactement l'inverse.
strtoupper fonctionne mais pas avec les caractères accentués.
Le séparateur de décimal est bien un point. donc mes champs numériques se remplissent correctement.
Je ne trouve pas le compromis entre les deux.
Une petite aide serait bienvenue.
---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/