Page 1 sur 1
Opération sur une chaine de caractère
Posté : 23 oct. 2006, 16:40
par zepretender
Bonjour,
Quand je fais une opération, j'aimerai récupérer dans deux variables :
- le chiffre entier avant la virgule
- les chiffres après la virgule
La virgule étant un "." (ex : 8.4848) je souhaite convertir ça en
$a = 8
$b = 4848
Existe-t-il quelque chose qui fait ça automatiquement ?
Merci
Posté : 23 oct. 2006, 16:53
par Ajoloca
Bonjour,
Personnellement je ne connais pas. Mais tu peux écrire un code qui te le face
$total = 8.4848;
// Séparation des deux parties
$temp = explode(".", $total);
// Récupération des parties séparées
list($int, $dec) = $temp;
echo $int . ' - ' . $dec; // Affiche 8 - 4848
Posté : 23 oct. 2006, 17:14
par Vikchill
Je dirais que $a c'est la partie entière et que $b c'est ta valeur de départ moins $a, donc un petit
intval devrait le faire.
Posté : 23 oct. 2006, 17:18
par Ajoloca
Je dirais que $a c'est la partie entière et que $b c'est ta valeur de départ moins $a, donc un petit
intval devrait le faire.
Ce qui nous donnerais
8.4848
$a = 8 // OK
mais
8.4848 - 8 est = à
0.4848 et non 4848
en d'autres termes je me retrouve avec le même problème mais avec des valeurs différentes
Posté : 23 oct. 2006, 17:28
par Vikchill
Bah si tu veux rester dans les formules mathématiques, $b c'est la partie décimale de ta valeur de départ multiplié par 10 exposant le nombre de décimales. Ici $b fait 4 caractères, tu fais $b*10^4, si ça faisait 6 caractères tu ferait $b*10^6.
Je sais, ça devient tordu, mais à un problème il y a souvent beaucoup de solutions.
Posté : 23 oct. 2006, 17:30
par Ajoloca
Re,
Et pourquoi faire simple quand en peu faire compliqué ?
Posté : 23 oct. 2006, 17:38
par Ryle
Je vote aussi pour l'explode... pas besoin de se soucier de la longueur, du résultat de la division euclidienne, ou de l'age du capitaine... y a deux chaines séparées par un point, on les split et c'est fini

Posté : 23 oct. 2006, 17:49
par Vikchill
Oui moi aussi je vote pour l'explode hein

J'avais mal lu l'énoncé du problème, c'est pour ça qu'après je me suis rattrapé aux branches

Posté : 23 oct. 2006, 17:50
par Ajoloca
Re,
Et pour le faire réutilisable
<?php
function intDec($valeur, &$int, &$dec){
list($int, $dec) = explode(".", $valeur);
}
$total = 8.4848;
intDec($total, $int, $dec);
echo $int . ' - ' . $dec; // Affiche 8 - 4848
?>
Posté : 23 oct. 2006, 17:53
par Ryle
Y a peut être pas besoin d'une fonction pour la réutilisabilité de la chose, on va aussi vite à utiliser directement le tableau retourné par explode() qu'à passer par une fonction nan ?
$valeur = 8.4848;
$tab = explode(".", $valeur);
echo $tab[0] . ' - ' . $tab[1]; // Affiche 8 - 4848
Posté : 23 oct. 2006, 17:56
par Ajoloca
Re, c'est aussi vrai !
Posté : 23 oct. 2006, 22:22
par sacco
mais dans l'énoncé il n'a jamais dit que son nombre avait toujours le meme nombre de chiffre derriere la virgule ?
Posté : 23 oct. 2006, 22:50
par graphistnet
mais dans l'énoncé il n'a jamais dit que son nombre avait toujours le meme nombre de chiffre derriere la virgule ?
Ca n'a aucune importance, le tout est de savoir qu'il y a une virgule qui va servir de séparateur

Posté : 24 oct. 2006, 11:54
par zepretender
Merci !
En fait, je me suis mal exprimé... Du coup, c'est l'une des solutions avancées qui est la bonne :
8.4848
$a = 8
$b = 0.4848
Du coup, le
8.4848-$a est bon !
Merci en tous cas, ça va m'aider pour la suite !