Entiers longs (64 bits), ça existe pas ???

Entiers longs (64 bits), ça existe pas ??? - PHP - Programmation

Marsh Posté le 21-05-2003 à 15:30:37    

Voilà, j'ai besoin d'entiers longs en PHP, mais apparemment, c'est pas faisable : c'est hallucinant :eek2:
 
Voilà ce que je voudrais faire, si ça marchait :
 

Code :
  1. $insee = "1800810033032";
  2. $insee = (int)$insee;
  3. $cle = 97 - ($insee % 97);


 
Seulement, $insee est trop long pour que ça fonctionne :/


Message édité par nero27 le 22-05-2003 à 11:05:37
Reply

Marsh Posté le 21-05-2003 à 15:30:37   

Reply

Marsh Posté le 21-05-2003 à 15:32:50    


Il y a le bazooka :
 
http://www.php.net/manual/en/ref.gmp.php


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
Reply

Marsh Posté le 21-05-2003 à 15:36:24    


pas sous windows :/

Reply

Marsh Posté le 21-05-2003 à 15:36:45    

nero27 a écrit :

Voilà, j'ai besoin d'entiers longs en PHP, mais apparemment, c'est pas faisable : c'est hallucinant :eek2:


 
Qu'appelles-tu "entier long" ? Codé sur 32 bits ?


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 21-05-2003 à 15:43:29    

Tetragrammaton IHVH a écrit :


 
Qu'appelles-tu "entier long" ? Codé sur 32 bits ?  


je crois qu'il veut carrément du 64....
 
edit: cf discussion sur blabla@prog


Message édité par backdafuckup le 21-05-2003 à 15:43:50
Reply

Marsh Posté le 21-05-2003 à 15:44:06    

backdafuckup a écrit :


je crois qu'il veut carrément du 64....
 
edit: cf discussion sur blabla@prog


exactement :/

Reply

Marsh Posté le 21-05-2003 à 16:26:38    

[:denetrob]

Reply

Marsh Posté le 21-05-2003 à 16:26:54    

tu devrais marquer exactement le calcul que tu veux faire ici, parce que ca doit etre faisable en plusieurs etapes, sans entier long (mais perso j'y connais rien en maths, j'ai oublié :/)

Reply

Marsh Posté le 21-05-2003 à 16:28:03    

lorill a écrit :

tu devrais marquer exactement le calcul que tu veux faire ici, parce que ca doit etre faisable en plusieurs etapes, sans entier long (mais perso j'y connais rien en maths, j'ai oublié :/)


c'est vrai !
 
Je vais éditer le premier post ;)

Reply

Marsh Posté le 21-05-2003 à 16:35:39    

Tetragrammaton IHVH m'a proposé de scindé l'entier en deux : est-ce que qq1 peut m'expliquer comment mettre ça en oeuvre, et surtout comment adapter ça à mon calcul ?

Reply

Marsh Posté le 21-05-2003 à 16:35:39   

Reply

Marsh Posté le 21-05-2003 à 16:54:12    

euh alors j'ai essayé ton code il marche très bien j'obtiens 32 pour $clé ...
 
tiens pour les infos du serveur sur lequel j'ai testé:
Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6mdk)  
PHP/4.2.3

Reply

Marsh Posté le 21-05-2003 à 16:56:54    

Anapajari a écrit :

euh alors j'ai essayé ton code il marche très bien j'obtiens 32 pour $clé ...
 
tiens pour les infos du serveur sur lequel j'ai testé:
Apache-AdvancedExtranetServer/1.3.26 (Mandrake Linux/6mdk)  
PHP/4.2.3


Si tu prends ta calculette, tu verras que 97 - (1800810033032 % 97) est égal à 7 :/

Reply

Marsh Posté le 21-05-2003 à 17:14:31    

up :cry:

Reply

Marsh Posté le 21-05-2003 à 17:15:57    

ouais bon alors j'ai réfléchi c'est normal que ça marche pas ton truc parce quoi qu'il arrive $insee tu le castes en int donc il te le transforme...
Faudrait mieux le caster en float comme c'est expliquer la:
http://www.php.net/manual/fr/langu [...] nteger.php
 
Mais d'un autre coté j'ai essayé ça marche toujours pas  :lol:

Reply

Marsh Posté le 21-05-2003 à 17:19:01    

Anapajari a écrit :

ouais bon alors j'ai réfléchi c'est normal que ça marche pas ton truc parce quoi qu'il arrive $insee tu le castes en int donc il te le transforme...
Faudrait mieux le caster en float comme c'est expliquer la:
http://www.php.net/manual/fr/langu [...] nteger.php
 
Mais d'un autre coté j'ai essayé ça marche toujours pas  :lol:  


Ben ouais, il me mets le nombre comme ceci : 1.80081003303E+012 :/

Reply

Marsh Posté le 21-05-2003 à 17:30:54    

bon je t'ai trouvé une solution ... c'est dégueu mais c'est déjà mieux que rien, tu fais ton calcul sous mysql
select 97 - MOD(1800810033032,97);
 
normalement ça doit marcher ... mais c'est dégueu :)

Reply

Marsh Posté le 21-05-2003 à 17:33:55    

Anapajari a écrit :

bon je t'ai trouvé une solution ... c'est dégueu mais c'est déjà mieux que rien, tu fais ton calcul sous mysql
select 97 - MOD(1800810033032,97);
 
normalement ça doit marcher ... mais c'est dégueu :)


Ca me plait bien, si je comprends bien, je fais :

Code :
  1. insert into table (cle) values (select 97 - MOD(1800810033032,97));


 
C'est ça :??:

Reply

Marsh Posté le 22-05-2003 à 09:55:23    

presque sauf que la syntaxe pour mysql c'est:

Code :
  1. insert into table select 97 - MOD(1800810033032,97) from uneAutreTable;

 
Alors je sens poindre la question "ouuiii mais si j'ai d'autres champs dans mon insert", bin à ce moment la tu fais un truc comme ça:

Code :
  1. insert into table select 97 - MOD(1800810033032,97), 'champs2', 'champs3', .... from uneAutreTable;


 
 

Reply

Marsh Posté le 22-05-2003 à 10:00:32    

Anapajari a écrit :

presque sauf que la syntaxe pour mysql c'est:

Code :
  1. insert into table select 97 - MOD(1800810033032,97) from uneAutreTable;

 
Alors je sens poindre la question "ouuiii mais si j'ai d'autres champs dans mon insert", bin à ce moment la tu fais un truc comme ça:

Code :
  1. insert into table select 97 - MOD(1800810033032,97), 'champs2', 'champs3', .... from uneAutreTable;


 
 
 


Si je comprends bien, tes lignes de code servent à importer les champs de uneAutreTable vers table, non ?

Reply

Marsh Posté le 22-05-2003 à 10:15:36    

pas du tout :)
En fait mysql semble mal supporter le insert into ... select ... si tu precises pas de table pour le select ( donc si tu fais insert into table select 97 - MOD(1800810033032,97) ).
Alors l'idée c'est de préciser une autre table car si tu fais par exemple

Code :
  1. select 'a', 'b', 'c', 'd' from uneTable


ça te remontera comme résultat a , b , c , d.
 
Donc si tu as besoin d'autres champs dans ton insert il suffit de rajouter dans ton select des constantes ( et pas des noms de champs de uneAutreTable )... Fus-je plus clair?

Reply

Marsh Posté le 22-05-2003 à 11:01:22    

ok, mais c'est pas très propre tout ça :/
 
Là, je suis en train de tester la concaténation de deux entiers ;)

Reply

Marsh Posté le 22-05-2003 à 12:18:57    

kadreg a écrit :


Il y a le bazooka :


 
d'habitude on propose la corde... mais bon le bazooka pourquoi pas... (blueflag déguisé)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 22-05-2003 à 13:20:09    

zion a écrit :


 
d'habitude on propose la corde... mais bon le bazooka pourquoi pas... (blueflag déguisé)


Et bien, personnellement, je suis en train de tester la concaténation de deux entiers (après avoir préalablement scindé l'entier long en deux), mais le pb, c'est que qd le deuxième nombre commence par un ou plusieurs "0", je les perds au final :
ex :  
1874467005485 donne 1874467.005485  
et au final, ça me donne :
18744675485  
 
:/

Reply

Marsh Posté le 22-05-2003 à 13:52:17    

bon reprenons :)
en fait le modulo a pas l'air de marcher super sur des aussi grand float mais en le faisant à la main apparament ça marche, donc le code donne:

Code :
  1. <?php
  2.   $insee = "1800810033032";
  3.   $insee = (float)$insee;
  4.   $cle = 97 - round((($insee / 97) - floor($insee / 97 ))*97);
  5. ?>

Reply

Marsh Posté le 22-05-2003 à 13:54:30    

Anapajari a écrit :

bon reprenons :)
en fait le modulo a pas l'air de marcher super sur des aussi grand float mais en le faisant à la main apparament ça marche, donc le code donne:

Code :
  1. <?php
  2.   $insee = "1800810033032";
  3.   $insee = (float)$insee;
  4.   $cle = 97 - round((($insee / 97) - floor($insee / 97 ))*97);
  5. ?>




Je teste ça de suite ;)

Reply

Marsh Posté le 22-05-2003 à 14:48:49    

Ca marche nickel, merci http://smileyonline.free.fr/images/gif/sourire/vignette1/thumbnails/1035319756_gif.gif

Reply

Marsh Posté le 22-05-2003 à 15:43:40    

my pleasure...

Reply

Marsh Posté le 22-05-2003 à 15:55:38    

[:prosterne] :jap: [:prosterne2]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed