Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Połączenia ciągów microtime() w liczbę całkowitą
Mistrig
post 1.02.2008, 17:47:18
Post #1





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 6.04.2006

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


Witam
Przy poszczególnych wiadomościach zapisuje czas ich zapisania za pomocą time(), niestety dokładność time() jest zbyt mała, więc zainteresowałem się funkcją microtime(). Problemem jest to, że podaje ona oddzielnie mikrosekundy i sekundy. W manualu znalazłem poniższą funkcję:
  1. <?php
  2. function getmicrotime(){
  3. list($usec, $sec) = explode(" ",microtime());
  4. return ((float)$usec + (float)$sec);
  5. }
  6. ?>

Łączy ona oba ciągi tworząc jedną liczbę zmiennoprzecinkową co by mi wystarczyło z czego jednak wiem operacje na liczbach zmiennoprzecinkowych są wolniejsze od operacji na zwykłych liczbach (jeśli jest inaczej wyprowadźcie mnie z błędu). Postanowiłem więc utworzyć jedną liczbę łącząc liczbę sekund z dwiema pierwszymi liczbami mikrosekund:
  1. <?php
  2. function getmicrotime()
  3. {
  4. list($msec, $sec) = explode(' ', microtime());
  5.  
  6. $msec *= 100;
  7.  
  8. $int = $sec.(int)$msec;
  9.  
  10. return $int;
  11. }
  12. ?>

Problem jednak gdy liczba mikrosekund jest mniejsza niż 10 np. 0,03. Wtedy po pomnożeniu przez 100 otrzymam liczbę 3. Natomiast gdybym miał liczbę 0,30 po pomnożeniu otrzymam liczbę 30. Jeśli liczba sekund przykładowo wynosiłaby 125 to po połączeniu z mikrosekundami otrzymam liczby: 1253 i 12530 co oczywiście nie jest prawidłowe. Niby mógłbym wykrywać czy liczba jest mniejsza od 10 i dodawać wiodące 0, jednak gdybym mnożył przez 1000 i więcej sprawa byłaby bardziej skomplikowana, jak to rozwiązać, pracować na ciągach?
Go to the top of the page
+Quote Post
sobstel
post 1.02.2008, 18:01:25
Post #2





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


wystarczy microtime z parametrem true. zwraca wtedy floata. np.

  1. <?php
  2. $result = microtime(true);
  3. ?>


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Mistrig
post 1.02.2008, 18:21:58
Post #3





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 6.04.2006

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


Faktycznie, spojrzałem do angielskiej wersji manuala i istnieje taka możliwość (polska wersja jest nieaktualna). Co do drugiej części problemu to wystarczy ciąg w postaci float pomnożyć przez 100, co pozwoli uniknąć wymienionych w moim poprzednim poście problemów.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 15:01