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
dr_bonzo
post
Post #2





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

Posty w temacie


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: 10.10.2025 - 17:54