Discussion:
recuperer le nombre decimal apres la virgule
(trop ancien pour répondre)
Davy Crockett
2008-12-04 17:38:48 UTC
Permalink
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
Olivier Miakinen
2008-12-04 18:11:55 UTC
Permalink
Post by Davy Crockett
Je recherche une fonction php qui me retourne la valeur apres la
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
Post by Davy Crockett
Cette fonction existe-t-elle en PHP ?
Laquelle exactement ? ;-)
Mickael Wolff
2008-12-04 18:34:04 UTC
Permalink
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
Davy Crockett
2008-12-04 21:02:37 UTC
Permalink
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
Mickael Wolff
2008-12-04 21:56:13 UTC
Permalink
$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
Olivier Miakinen
2008-12-04 22:03:57 UTC
Permalink
Post by Davy Crockett
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.
Post by Davy Crockett
Donc mes décimales qui réprésent les centimes iront de 01 à 99
$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 ?
Davy Crockett
2008-12-05 17:04:07 UTC
Permalink
Post by Olivier Miakinen
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

Loading...