Aller au contenu
sandrinoo

Très grand nombre et fonction substr

Noter ce sujet :

Recommended Posts

Comme d'hab, quand je tourne en rond plus d'une heure


et que je trouve rien sur internet pour m'aider


je me tourne naturellement vers mon forum préféré :


 


Problèmes du jour :



echo substr(555666655447855333669999554466,-1,1);

me donne 9 et pas 6. Pourquoi ????


et :



echo 19160205962652799215665*3;

me donne la notation scientifique : 95.7480617887958E+22.


Comment avoir le chiffre normal en entier ?


 


Rien trouvé sur internet de concluant...


 


Partager ce message


Lien à poster
Partager sur d’autres sites

Salut,


Si tu veux faire un substr sur ton grand nombre il faudrait peut-être le forcer en tant que chaine :



$a = (string)555666111222333444555;
ou
$a = '' . 555666111222333444555;
echo substr(a, -1 1);

Ca devrait fonctionner comme ca.


Partager ce message


Lien à poster
Partager sur d’autres sites

Tes chiffres sont bien trop grands. Je ne vois pas de solution.


 


Je pense vraiment que tu devrais revoir la conception de ton code. Dans ma carrière, je n'ai jamais eu à gérer ce genre de cas et pourtant, je travaille dans une banque.


Partager ce message


Lien à poster
Partager sur d’autres sites

Pour une opération telle que 19160205962652799215665*3 je ne vois que "bc" en natif.



# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
19160205962652799215665*3
57480617887958397646995


La taille d'un entier est dépendant de la plate-forme, cependant, une valeur maximale d'environ 2 milliards est habituelle (cela correspond à 32 bits signés). Les plateformes 64-bit ont habituellement une valeur maximale d'environ 9E18, sauf pour Windows, qui est toujours en 32 bit. PHP ne supporte pas les entiers non-signés. La taille d'un entier peut être déterminée en utilisant la constante PHP_INT_SIZE, et la valeur maximale, en utilisant la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.



Donc sur un serveur en 64 bits, la limite pour un entier signé est égale à : 9223372036854775807


Qui correspond à 2^64 -1 (64 représentant 8 octets, exprimés en bits) vu que PHP_INT_SIZE est défini à 8


Partager ce message


Lien à poster
Partager sur d’autres sites

Et pour info :



echo substr("555666655447855333669999554466",-1,1);

retourne bien 6



echo substr((string)555666655447855333669999554466,-1,1);

ou



echo substr(555666655447855333669999554466,-1,1);

retournent 9 vu que le nombre entier est limité par php à 9E18 ... les derniers caractères sont supprimés.


Partager ce message


Lien à poster
Partager sur d’autres sites

Merci à vous 3.


 


Je pensais pas que php était une aussi petite nature ! smartass.gif


 


Dans ma carrière, je n'ai jamais eu à gérer ce genre de cas et pourtant, je travaille dans une banque

 



 


A portekoi : pourtant les banques ont l'air de faire dans la démesure ces temps-ci !


 


Merci encore à tous : je vais revoir mon code pour essayer de limiter ce nombre.


Il est vrai que mes codes sont parfois un peu compliqués et ils mériteraient d'être simplifiés !

Partager ce message


Lien à poster
Partager sur d’autres sites

HS : Ce ne sont pas vraiment les banques mais l'état. Regarde la loi Eckert sur les comptes dit "inactifs" :)


 


Je ne pense pas que cela soit ton code mais plus ta conceptualisation de tes problématiques.


Partager ce message


Lien à poster
Partager sur d’autres sites

Je pensais pas que php était une aussi petite nature ! smartass.gif

J'aimerais tout de même voir ce type de montant sur mon relevé de compte smile.gif

 

Je laisserais dans ce cas bien volontiers à l'état un pourboire qui lui permettrait d'apurer sa dette !

Partager ce message


Lien à poster
Partager sur d’autres sites

A portekoi : pour pouvoir conceptualiser il faut avoir le cerveau qui va avec !


Et être un peu matheuse sur les bords ! et moi étant plutôt graphiste...


Modifié par sandrinoo

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×