recuperer le nombre decimal apres la virgule

Le
Davy Crockett
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Olivier Miakinen
Le #18048271
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 ? ;-)
Mickael Wolff
Le #18048411
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
Davy Crockett
Le #18049701
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
Mickael Wolff
Le #18050231
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
Olivier Miakinen
Le #18050401
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 ?
Davy Crockett
Le #18056441
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
Publicité
Poster une réponse
Anonyme