[php]les float !!

les float !! [php] - PHP - Programmation

Marsh Posté le 27-05-2003 à 15:20:52    

Bonjour,
Comment transformer un 2 word ou un double word en float??
merci pour vos lumières.


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Marsh Posté le 27-05-2003 à 15:20:52   

Reply

Marsh Posté le 27-05-2003 à 17:26:37    

deff a écrit :

Bonjour,
Comment transformer un 2 word ou un double word en float??
merci pour vos lumières.
 


J'ai pas tout compris, mais si tu parles de cast, tu peux faire ça :
 

Code :
  1. $var=(float)$var;


ou

Code :
  1. settype($var,"float" );

Reply

Marsh Posté le 28-05-2003 à 09:01:39    

en fait la valeur en hexa par exemple 16#42C9178D, donne en entier signé : 1120475021. Par contre en float (ou réels) elle donne : 100.546 .
Donc j'aimerai savoir si il existe un fonction php pour convertir
une valeur soit hexadécimale, soit entière, soit sous forme binaire (genre une string '0101010101....') en float.
voila. Je sais c'est dur comme question.  :cry:


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Marsh Posté le 28-05-2003 à 09:15:41    

par exemple en java il y a : intBitsToFloat


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Marsh Posté le 03-06-2003 à 10:48:55    

bon j'en ai chi@#! mais je crois que j'ai réussi, mais il y a peut être des améliorations à faire.
 
voici les fonctions pour convertir un dword signé en float :
 

Code :
  1. function DWSign2NonSign($decsign){
  2.          if ($decsign<0) {
  3.             $decsign=4294967296-($decsign*-1);
  4.   $decimal=$decsign;
  5.       }
  6.          else {
  7.              $decimal=$decsign;
  8.          }
  9.          return $decimal;
  10.     }


 

Code :
  1. function DWordToFloat($dword){
  2. if ($dword<0){
  3.  $dword=$this->DWSign2NonSign($dword);
  4.  $binstring=$this->Dec2Bin($dword,32);
  5.  $exposant=substr($binstring,1,8);
  6.  $exposant=bindec($exposant)-127;
  7.  $mantisse="1.".substr($binstring,9,32);
  8.  $valeur="1".substr($mantisse,2,$exposant);
  9.  $entier=bindec($valeur);
  10.  $decimale=substr($mantisse,$exposant+2,27);
  11.  for ($i=0;$i<strlen($decimale);$i++){
  12.   $denominateur=(pow(2,$i+1));
  13.   $nominateur=substr($decimale,$i,1);
  14.   $temp=(float)($temp+($nominateur/$denominateur));
  15.  }
  16.  $decimale=$temp;
  17.  $valeur=($entier+$decimale)*-1;
  18.  return $valeur;
  19. }
  20. else {
  21.  $dword=$this->DWSign2NonSign($dword);
  22.  $binstring=$this->Dec2Bin($dword,32);
  23.  $exposant=substr($binstring,1,8);
  24.  $exposant=bindec($exposant)-127;
  25.  $mantisse="1.".substr($binstring,9,32);
  26.  $valeur="1".substr($mantisse,2,$exposant);
  27.  $entier=bindec($valeur);
  28.  $decimale=substr($mantisse,$exposant+2,27);
  29.  for ($i=0;$i<strlen($decimale);$i++){
  30.   $denominateur=(pow(2,$i+1));
  31.   $nominateur=substr($decimale,$i,1);
  32.   $temp=$temp+($nominateur/$denominateur);
  33.  }
  34.  $decimale=$temp;
  35.  $valeur=($entier+$decimale)*1;
  36.  return $valeur;
  37.  }
  38. }


 

Code :
  1. function FloatToDword($float){
  2. if ($float<0){
  3.  $float=$float*-1;
  4.  $entier=decbin(floor($float));
  5.  $temp=($float-floor($float));
  6.  for($i=0;$i<(23-strlen($entier));$i++){
  7.   $temp=$temp*2;
  8.   if($temp>=1){
  9.    $decimale=$decimale."1";
  10.    }
  11.   else{
  12.    $decimale=$decimale."0";
  13.    }
  14.   $temp=$temp-floor($temp);
  15.  }
  16.  $exposant=strlen($entier)-1+127;
  17.  $exposant=decbin($exposant);
  18.  $mantisse=substr($entier,1,strlen($entier)).$decimale;
  19.  for ($i=0;$i<(23-strlen($mantisse));$i++){
  20.  $mantisse=$mantisse."0";
  21.  }
  22.  $binstring="1".$exposant.$mantisse;
  23.  $valeur=bindec($binstring);
  24.  return $valeur;
  25. }
  26. else {
  27.  $entier=decbin(floor($float));
  28.  $temp=($float-floor($float));
  29.  for($i=0;$i<(23-strlen($entier));$i++){
  30.   $temp=$temp*2;
  31.   if($temp>=1){
  32.    $decimale=$decimale."1";
  33.    }
  34.   else{
  35.    $decimale=$decimale."0";
  36.    }
  37.   $temp=$temp-floor($temp);
  38.  }
  39.  $exposant=strlen($entier)-1+127;
  40.  $exposant=decbin($exposant);
  41.  $mantisse=substr($entier,1,strlen($entier)).$decimale;
  42.  for ($i=0;$i<(23-strlen($mantisse));$i++){
  43.  $mantisse=$mantisse."0";
  44.  }
  45.  $binstring="0".$exposant.$mantisse;
  46.  $valeur=bindec($binstring);
  47.  return $valeur;
  48.  }
  49. }


 
si ça intéresse quelqu'un!!?? :??:


---------------
-->>C'est l'histoire d'un gars qui rêve qu'il mange de la guimauve.Il se réveille et il a plus d'oreiller.<<--
Reply

Sujets relatifs:

Leave a Replay

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