Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recuperer le nombre decimal apres la virgule

6 réponses
Avatar
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

6 réponses

Avatar
Olivier Miakinen
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 ? ;-)
Avatar
Mickael Wolff
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
Avatar
Davy Crockett
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
Avatar
Mickael Wolff
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
Avatar
Olivier Miakinen
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 ?
Avatar
Davy Crockett
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