Opération sur une chaine de caractère

Eléphant du PHP | 52 Messages

23 oct. 2006, 16:40

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

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 16:53

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
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 193 Messages

23 oct. 2006, 17:14

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.

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 17:18

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
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 193 Messages

23 oct. 2006, 17:28

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.

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 17:30

Re,

Et pourquoi faire simple quand en peu faire compliqué ?
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 oct. 2006, 17:38

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 193 Messages

23 oct. 2006, 17:49

Oui moi aussi je vote pour l'explode hein :mrgreen: J'avais mal lu l'énoncé du problème, c'est pour ça qu'après je me suis rattrapé aux branches :mrgreen:

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 17:50

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
?>
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 oct. 2006, 17:53

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 
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 1961 Messages

23 oct. 2006, 17:56

Re, c'est aussi vrai !
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 180 Messages

23 oct. 2006, 22:22

mais dans l'énoncé il n'a jamais dit que son nombre avait toujours le meme nombre de chiffre derriere la virgule ?

Eléphant du PHP | 184 Messages

23 oct. 2006, 22:50

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 :wink:
Image

Eléphant du PHP | 52 Messages

24 oct. 2006, 11:54

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 !