Aller au contenu

Très grand nombre et fonction substr


sandrinoo

Sujets conseillés

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...


 


Lien vers le commentaire
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.


Lien vers le commentaire
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.


Lien vers le commentaire
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


Lien vers le commentaire
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.


Lien vers le commentaire
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 !

Lien vers le commentaire
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.


Lien vers le commentaire
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 !

Lien vers le commentaire
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
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...