recuperer le nombre decimal apres la virgule

This is a discussion on recuperer le nombre decimal apres la virgule within the Le langage PHP Hypertext Preprocessor (fr.comp.lang.php) forum.

recuperer le nombre decimal apres la virgule

Postby Davy Crockett on Thu Dec 04, 2008 10:38 am

Bonjour,

Je recherche une fonction php qui me retourne la valeur apres la
virgule du type :

fonction(4.3) => 3
fonction (17.999) => 999

j'ai tapé un code qui me donne 0.3 et 0.999, mais ce qu'il me faut
c'est le 3 et le 999.

Cette fonction existe-t-elle en PHP ?

Merci
Davy Crockett
 
Posts: 4
Joined: Thu Jul 10, 2008 6:11 am

Re: recuperer le nombre decimal apres la virgule

Postby Olivier Miakinen on Thu Dec 04, 2008 11:11 am

Le 04/12/2008 18:38, Davy Crockett a écrit :
>
> Je recherche une fonction php qui me retourne la valeur apres la
> virgule du type :
>
> fonction(4.3) => 3
> fonction (17.999) => 999

Je suppose que tu voulais dire « après le point décimal » plutôt
qu'après la virgule. Par ailleurs, tes deux exemples ne me semblent
pas suffisants pour spécifier exactement ce que tu veux.

fonction(4.300) => 3 ou 300 ?
fonction(4.003) => 3 ou "003" ?

Selon le cas, c'est-à-dire selon que tu veuilles traiter des chaînes ou
des nombres décimaux, la réponse sera différente.

Solution 1 :
$res = array_pop(explode('.', $n))

Résultats attendus ($n est une chaîne) :
4.3 -> 3
17.999 -> 999
4.300 -> 300
4.003 -> 003

Solution 2 :
$res = fmod($n, 1);
while ($res != floor($res)) $res *= 10;

Résultats attendus ($n est un nombre) :
4.3 -> 3
17.999 -> 999
4.300 -> 3
4.003 -> 3

> Cette fonction existe-t-elle en PHP ?

Laquelle exactement ? ;-)
Olivier Miakinen
 
Posts: 1561
Joined: Mon Jun 30, 2003 9:51 am

Re: recuperer le nombre decimal apres la virgule

Postby Mickael Wolff on Thu Dec 04, 2008 11:34 am

Davy Crockett a écrit :
> j'ai tapé un code qui me donne 0.3 et 0.999, mais ce qu'il me faut c'est
> le 3 et le 999.
>
> Cette fonction existe-t-elle en PHP ?

Je ne pense pas vu que ça n'a pas de sens mathématique. Comment
fais-tu la différence entre 0.003 et 0.300 si tu ne récupère pas la
virgule (ou la grandeur) ?

Plus prosaïquement, quel est le but de la man½uvre ?

// si tu veux les deux première décimale :
$decimal = (int) ($nombre - (int) $nombre) * 100 ;

À noter que tu risque d'avoir des problèmes d'arrondis en raison de
la représentation mémoire des nombres flottants... et... ton nombre est
un nombre en représentation machien ou une chaine de caractère
représentant un nombre ?

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org/
Mickael Wolff
 
Posts: 138
Joined: Fri Mar 17, 2006 3:41 pm

Re: recuperer le nombre decimal apres la virgule

Postby Davy Crockett on Thu Dec 04, 2008 2:02 pm

Mickael Wolff vient de nous annoncer :
> Davy Crockett a écrit :
>> j'ai tapé un code qui me donne 0.3 et 0.999, mais ce qu'il me faut c'est le
>> 3 et le 999.
>>
>> Cette fonction existe-t-elle en PHP ?

Je fais tout ça pour convertir des montants en euros en lettre via une
fonction de conversion d'entiers en lettre.

Donc mes décimales qui réprésent les centimes iront de 01 à 99
Voila ce que j'ai fait :

$centimes=substr(number_format($montant-floor($montant), 2, ',', ' '),
-2)

ça a l'air de marcher
Davy Crockett
 
Posts: 4
Joined: Thu Jul 10, 2008 6:11 am

Re: recuperer le nombre decimal apres la virgule

Postby Mickael Wolff on Thu Dec 04, 2008 2:56 pm

Davy Crockett a écrit :
> $centimes=substr(number_format($montant-floor($montant), 2, ',', ' '), -2)

Dans ce cas là la solution que je t'ai proposé sera plus efficace, et
plus lisible.

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org/
Mickael Wolff
 
Posts: 138
Joined: Fri Mar 17, 2006 3:41 pm

Re: recuperer le nombre decimal apres la virgule

Postby Olivier Miakinen on Thu Dec 04, 2008 3:03 pm

Le 04/12/2008 22:02, Davy Crockett a écrit :
>
> Je fais tout ça pour convertir des montants en euros en lettre via une
> fonction de conversion d'entiers en lettre.

Du coup je comprends encore moins tes exemples. fonction(4.3) devrait
donner 30 plutôt que 3, et fonction (17.999) devrait donner 99.9 plutôt
que 999.

> Donc mes décimales qui réprésent les centimes iront de 01 à 99
> Voila ce que j'ai fait :
>
> $centimes=substr(number_format($montant-floor($montant), 2, ',', ' '),
> -2)
>
> ça a l'air de marcher

Dans ce cas... « round(fmod($n,1) * 100) » devrait fonctionner tout
aussi bien, non ?
Olivier Miakinen
 
Posts: 1561
Joined: Mon Jun 30, 2003 9:51 am

Re: recuperer le nombre decimal apres la virgule

Postby Davy Crockett on Fri Dec 05, 2008 10:04 am

Olivier Miakinen a utilisé son clavier pour écrire :

> Dans ce cas... « round(fmod($n,1) * 100) » devrait fonctionner tout
> aussi bien, non ?

Ok je ne connaissais pas toutes ces fonctions. Elles semblent en effet
plus efficaces. Je vais les tester.

Merci beaucoup
Davy Crockett
 
Posts: 4
Joined: Thu Jul 10, 2008 6:11 am


Return to Le langage PHP Hypertext Preprocessor (fr.comp.lang.php)

Who is online

Users browsing this forum: No registered users and 0 guests