Connaitre le nombre de chiffre d'un entier ou d'un réel [Résolu]

Signaler
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010
-
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010
-
Bonjour à tous

Est-il possible de connaitre le nombre de chiffre d'un entier ou d'un
réel sans faire de transtypage. Existe-il une fonction du type intlen()
ou reallen()?

ex:

$int = 33;

$long = 2;

ou surtout $int = 33.333;

$long = 5;

17 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
De longues années de pratique...
PHP_INT_SIZE
et pour la valeur max :
PHP_INT_MAX
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
35
salut

tu fais un log10 pour avoir le nombre de chiffres avant la virgule.
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
27
salut,

je ne sais pas mais pour un entier, il te suffit de faire :

$int = 78;
$long = $int.lenght;

et pour un decimal, il te suffit de faire :

$int = 78.569;
$long = $int.lenght-1;

a++

PS : je ne suis pas sur que ça marche mais tu peus toujours essayer !

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

@nicomiville => ce n'est pas du php ça...

<?php
$int = 1789;
echo strlen((string)$int);
?>
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
27
a, mince, de mieux en mieux, maintenant je confond du javascript avec du php ! :-(

a++

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Sans faire de transtypage on ne peut pas, que je sache.
Et pour des rééls, il reste les expressions régulières...
<?php
$float = 33.333;
preg_match_all('`([\d])`', (string)$float, $aRes);
echo count($aRes[1]);
?>
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Merci pour ton aide
En essayant ton code j'obtient comme affichage

78lenght
77.569

Dans le premier cas, lenght est pris comme une chaine et dans le second il retire 1.
j'ai une E_NOTICE en error_reporting(E_ALL)

Ca serait plustot
$long = $int.length;
$long = $int.length-1;

Mais j'ai le même résultat. Ce qui est marrant car le compile m'indique 'Use of undefined constant length' ou 'Use of undefined constant lenght' mais ça m'enlève quand même 1 dans les deux orthographes différentes.
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Désolé j'avais pas vu les nouveaux post. C'est bizarre d'avoir une E_notice mais qu'il enlève 1 dans mes deux cas, non?
Merci malalam pour ta réponse et à toi aussi  nicomilville.
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Le problème avec (string) ou la regex, c'est que  sur des  nombres de plus de douze chiffres il intègre  l'exposant et donne la longeur du chiffre avec l'exposant.
ex: $float = 43.434344444444444;
$long=12;
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Non, c'est parce que 12, c'est la limite de la taille d'un chiffre en php, de base.
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Donc au delà de 12 :
$float = 434304340304034034343430430403403;
preg_match_all('`([\d])`', (string)$float, $aRes);
echo count($aRes[1]);
echo (string)$float.;
affichage
15
4.34304340304E+032

$float = 434304340304034034343430430403403;
$chaine = (string)$float;
$nb = strlen($chaine);
echo $chaine;
echo $nb;
affichage
4.34304340304E+032

18
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
ou tu peux changer ton php.ini (cette valeur peut-être changée).
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Merci encore (mais où vas tu chercher tous çà, franchement balaise)
Par contre une dernière chose quelle directive du php.ini, çela m'éviterais de checher et encore thanks.
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
27
Salut,

je crois que c'est celle la :

; The number of significant digits displayed in floating point numbers.
precision    =  14

a++

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
3472
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
28 février 2014
27
désolé, on s'est croisé !

Si la réponse vous convient, pensez : Réponse accepté !
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Super, Merci mais php4 donc chaud. A plus
Messages postés
95
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
8 septembre 2010

Salut coucou 747, merci pour ta réponse.