Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
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 17/02/2011, 23h22   #1
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Par défaut chiffre apres la virgule

bonjour
j'aimerais savoir si c'est possible de faire celà:
si le chiffre est inferieur à 1 comme 0.852A j'aimarais avoir 852 Ma
voici mon code
Code :
$desc=preg_replace('#0(\.)([0-9]+)(A| A)#','$2 Ma',$desc);
j'aimerais que
s'il y a un chiffre apres la virgule ca affiche 00
s'il y a 2 chiffre apres la virgule ca affiche 0
s'il y a 3 chiffre apres la virgule ca affiche rien
exemple :
0.8 donc ca affiche 800
0,83 donc ca affiche 830
0.855 donc ca affiche 855
j'espere que quelqu'un me comprend .
merci d'avance
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 23h47   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Code :
1
2
3
4
5
6
7
<?php
$desc = "0.852A";
$float = floatval($desc);
if ($float < 1) {
   $desc = $float * 1000 . " Ma";
}
echo $desc;
Mais ca serait plus propre de ne pas stocker ton unité et d'avoir une fonction qui se charge de l'affichage :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
function affiche($valeur) {
if ($valeur < 1) {
   $display = $valeur * 1000 . " Ma";
}
else {
   $display = $valeur . " a";
}
return $display;
}
 
echo affiche(0.85);
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 00h00   #3
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
merci sabotage
mais si j'ai
$desc="bonjour sabotage j'ai 0.825A";
j'aimerais bien que ca m'affiche
"bonjour sabotage j'ai 825 Ma"
mais ta formule ne marche pas
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 01h52   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

L'idéal est donc d'utiliser la fonction preg_replace_callback().
Citation:
Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de rappel callback qui sera appelée, avec les éléments trouvés en arguments.
Ce qui nous donne...
Code :
1
2
3
4
5
6
7
8
9
10
$desc='Bonjour Sabotage j\'ai 0.825A ou peut-être bien 0.1 A.';
 
// Fonction de callback
function Convert($m){
	return str_pad($m[1],3,'0',STR_PAD_RIGHT).' Ma';
}
 
$desc=preg_replace_callback('/\b0\.(\d+) ?A\b/','Convert',$desc);
 
echo $desc;
Voir aussi str_pad() utilisée dans l'exemple. Nous pouvons aussi utiliser la fonction sprintf().
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 09h31   #5
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Je persiste a dire que ce n'est pas une bonne façon de voir la chose.

Par exemple si j'écris "ça fait 0.1 après calcul"
Je me retrouve avec "ça fait 100 Maprès calcul"
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 12h20   #6
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
j'ai peu être une piste avec preg_macht et preg_replace .
j'ésaie de tester avant
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 12h57   #7
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Citation:
Envoyé par sabotage
si j'écris "ça fait 0.1 après calcul"
Je me retrouve avec "ça fait 100 Maprès calcul"
Non car le motif contient l'assertion \b (limite de mot).

Citation:
Envoyé par bigs3232
une piste avec preg_match et preg_replace.
preg_replace_callback().
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 13h16   #8
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
"ça fait 0.1 a peu près" alors
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 13h30   #9
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Et oui tu as raison, même la limite de mot n'est pas suffisante.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h28   #10
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
pas trouvé d'autres piste , je vais utiliser vos codes .ce qui est déjà bien
merci quand meme
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 18h44   #11
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
petite question du code à eric
pourquoi le 1
et pourquoi le ?
merci d'avance .
vous êtes trop fort !!
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 19h50   #12
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
$m[1] est la partie décimale capturée.

Pour la chaine "0.128 A", le paramètre $m de la fonction Convert() est :
Code :
1
2
3
4
array{
	[0]=>"0.128 A"
	[1]=>"128"
}
Quand au point d'intérrogation (?), Il permet de rendre facultatif l'espace qui précède la lettre A.
0.10A => Ok
0.10 A => Ok
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 22h19   #13
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
ah oui .trop fort ecric2a .j'ai pas vu l'espace je pensais que t'allais mettre \s
grand merci pour l'explication .Je me sens moins bete du coup
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h29.


 
 
 
 
Partenaires

Hébergement Web