Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> (10) -> (2) i odwrotnie
batman
post
Post #1





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Witam. Nie pisałem dawnom, ponieważ roboty dużo, a czasu mało (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Teraz mam mniej roboty, bo napotkałem przeszkodę.

Do rzeczy. Jak zamieniać liczby z systemu dziesiętnego na dwójkowy i odwrotnie? liczbami tymi są ułamki dziesiętne, więc decbin i bindec nie działa. Nie da się też zamienić osobno liczby całkowitej a potem ułamka, bo bzdury wychodzą. Czy jakaś funkcja, która to zrobi, czy musze pisać skrypt?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
DeyV
post
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




  1. <?php
  2.  
  3. echo base_convert ( 123.12, 10, 2 );
  4.  
  5. ?>
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




DeyV: niestety nie działa. Dla 2.1 i dla 21 daje taki sam wynik - 10101. Dzięki za zainteresowanie.

Już sobie poradziłem. Nie jest to eleganckie, ale działa (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

  1. <?php
  2.  
  3. $aWynikbin=array();
  4.  
  5. //zamiana na system dwojkowy
  6. $aLiczba=explode('.',"0.6458");
  7.  
  8. while($aLiczba[1]!=0)
  9. {
  10. $ulamek="0.".$aLiczba[1];
  11. $wynik=$ulamek*2;
  12.  
  13. $wynik=(float)$wynik;
  14.  
  15. $aWynik=explode('.',$wynik);
  16.  
  17. if($wynik>=1)
  18. {
  19. $aWynikbin[]=1;
  20. }
  21. else
  22. {
  23. $aWynikbin[]=0;
  24. }
  25. $aLiczba=explode('.',$wynik);
  26.  
  27. if(count($aWynikbin)>10)
  28. {
  29. break;
  30. }
  31. }
  32.  
  33. $wynikbin=implode('',$aWynikbin);
  34. echo $wynikbin.'<br /><br /><br />';
  35.  
  36. //zamiana na system dziesietny
  37. $liczba="010";
  38.  
  39. for($i=0;$i<strlen($liczba);$i++)
  40. {
  41. $wykladnik=$i+1;
  42. $element=substr($liczba,$i,1)*pow(2,-$wykladnik);
  43. $wynikdec=$wynikdec+$element;
  44.  
  45. }
  46. echo $wynikdec;
  47.  
  48. ?>


Ten post edytował batman 19.10.2005, 22:07:35
Go to the top of the page
+Quote Post
shpyo
post
Post #4





Grupa: Zarejestrowani
Postów: 574
Pomógł: 2
Dołączył: 13.04.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


decbin" title="Zobacz w manualu php" target="_manual i bindec" title="Zobacz w manualu php" target="_manual (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(shpyo @ 2005-10-23 14:55:30)

Piotruś czytaj dokładniej (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Cytat(batman @ 2005-10-19 18:26:10)
(...) liczbami tymi są ułamki dziesiętne, więc decbin i bindec nie działa. (...)
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


  1. <?php
  2. /**
  3.  * Konwertuje libczbe zmiennoprzeinkowa DEC -> BIN 
  4.  * 
  5.  * @param $floatNumber float liczba ktora konwertujemy
  6.  * @param $intPrecision integer 
  7.  * @param $boolTrim boolean obcinac koncowe zera czy nie)
  8.  * @return float liczba skonwertowana do syst buinarnego
  9.  */
  10. function floatDecToBin( $floatNumber, $intPrecision, $boolTrim )
  11. {
  12. $intDestBase = 2;
  13. $arrNumberParts = explode( '.', strval( $floatNumber ) );
  14.  
  15. // czesc calkowita
  16. $strIntegerPartBin = decbin( $arrNumberParts[ 0 ] );
  17.  
  18. // czesc ulamkowa
  19. $strFractionPartBin = '';
  20. $temp = 0;
  21. $fraction = floatval( '.' . $arrNumberParts[ 1 ] ); // skonwertuj czesc ulamkowa (bez kropki) do ulamka
  22. for ( $i = 0; $i < $intPrecision; $i++ )
  23. {
  24. $fraction *= $intDestBase;
  25. $fl = floor( $fraction ); 
  26. $strFractionPartBin .= $fl;// dopisz kolejna cyfre (wartosc calkowita iloczynu)
  27. $fraction -= $fl; // 'odetnij' czesc calkowita
  28. }
  29.  
  30. $value = $strIntegerPartBin . '.' . $strFractionPartBin;
  31.  
  32. return ( $boolTrim ) ? floatval( rtrim( $value, '0' ) ) : floatval( $value );
  33. }
  34.  
  35.  
  36. print( floatDecToBin( '12.625', 6, TRUE ) . "n" ); // 101.101 (b)
  37. print( floatDecToBin( '12.625', 6, FALSE ) . "n" ); // 101.101000 (b)
  38. print( floatDecToBin( '12.625', 1, FALSE ) . "n" ); // 101.1 (b)
  39. ?>


Pozniej moze dorobie funkcje ogolne, dla dowolnych baz, w obu kierunkach.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 12:27