Connaitre le nombre de chiffre d'un entier ou d'un réel

Résolu
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010 - 24 mai 2008 à 09:44
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010 - 29 mai 2008 à 00:21
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2008 à 14:24
De longues années de pratique...
PHP_INT_SIZE
et pour la valeur max :
PHP_INT_MAX
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
24 mai 2008 à 20:42
salut

tu fais un log10 pour avoir le nombre de chiffres avant la virgule.
1
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
24 mai 2008 à 09:59
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é !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2008 à 10:26
Hello,

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

<?php
$int = 1789;
echo strlen((string)$int);
?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
24 mai 2008 à 10:30
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é !
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2008 à 10:30
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]);
?>
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 10:39
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.
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 10:43
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.
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 10:56
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;
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2008 à 11:04
Non, c'est parce que 12, c'est la limite de la taille d'un chiffre en php, de base.
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 11:36
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
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mai 2008 à 11:48
ou tu peux changer ton php.ini (cette valeur peut-être changée).
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 14:21
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.
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
24 mai 2008 à 14:26
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é !
0
nicomilville Messages postés 3472 Date d'inscription lundi 16 juillet 2007 Statut Membre Dernière intervention 28 février 2014 36
24 mai 2008 à 14:26
désolé, on s'est croisé !

Si la réponse vous convient, pensez : Réponse accepté !
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
24 mai 2008 à 14:54
Super, Merci mais php4 donc chaud. A plus
0
gr43 Messages postés 95 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 8 septembre 2010
29 mai 2008 à 00:21
Salut coucou 747, merci pour ta réponse.
0
Rejoignez-nous