Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlenie wartości zmiennej typu float jako minuty:sekundy:ms
Forum PHP.pl > Forum > Przedszkole
gośc;)
Cześć,
Mam w bazie danych pole czas, jest to typ float. Zależy mi tutaj na dużej dokładności.
Przykładowymi wartościami są 94.1554, 133.9.
W jaki sposób mam z floata obliczyć ile tutaj jest minut? ( docelowo: 94.1554 = 1.34:1554)
skowron-line
http://stackoverflow.com/questions/1298486...-datetime-mysql to powinno pomóc
Gość
Typek tam dzieli całość, chcę zachować część po przecinku, to jest czas w sekundach. Na coś takiego wpadłem już wczoraj, niestety nie rozwiązuje to problemu.
Pawel_W
od tego masz przecież operator reszty z dzielenia...

http://stackoverflow.com/a/12985354
Gość
Nie bardzo rozumiem. Podałeś ten sam link co w drugim poście.
btw. zmieniłem typ danych z float na double.
Pawel_W
podałem Ci link do konkretnego rozwiązania, bo myślałem, że mogłeś je przeoczyć - przecież tam jest dokładnie to, czego chciałeś - zamiana float na hh:mm:ss
Gość
Czytałem wszystko tam.

Cytat
For 283.813090

Jego wynik to:
Kod
19:30:51

Mój wynik dla tej samej wartości ma wyglądać tak:
Kod
4:03.813090

4 minuty, 3 sekundy i ileś tam setnych(bez zmian)
Pawel_W
ok, niedoczytałem

setne możesz otrzymać za pomocą dzielenia bez reszty przez 1

co do minut i sekund - ucinasz część dziesiętną floata, minuty to dzielenie całkowite przez 60, reszta to sekundy

możesz to potem skleić w jedno za pomocą CONCAT
Gość
Cytat(Pawel_W @ 2.01.2013, 14:25:21 ) *
co do minut i sekund - ucinasz część dziesiętną floata


Jak?
Pawel_W
FLOOR()
Gość
Cytat(Pawel_W @ 2.01.2013, 14:25:21 ) *
setne możesz otrzymać za pomocą dzielenia bez reszty przez 1


  1. $floating_number = $czas / 1;

Gdzie $czas to pobrana wartość z bazy

Output to
Kod
7.484794

Co źle zrobiłem?
Pawel_W
przepraszam, pogubiłem się już całkiem w odpisywaniu smile.gif

masz tutaj całość:
  1. $time = 283.81309;
  2. $m = floor(floor($time)/60); // minuty
  3. $s = floor(floor($time)%60); // sekundy
  4. $ms = $time - $m*60 - %s; // setne

powinno zadziałać
Gość
  1. $time = 283.81309;
  2.  
  3. $m = floor(floor($time)/60); // minuty
  4.  
  5. $s = floor(floor($time)%60); // sekundy
  6.  
  7. $ms = $time - $m*60 - $s; // tutaj był błąd w zapisie


Jest to bardzo podobne do tego, co ja napisałem. Działa prawie że dobrze.
Wyświetla
0.7.0.484794
czyli $ms = 0.484794, a ma być .484794
Pawel_W
najprościej Ci będzie zamienić to na stringa i wypieprzyć "0.", ew. możesz bawić się w przemnażanie przez 10 aż zniknie Ci część dziesiętna
Gość
Ok, teraz działa.
Chciałbym jeszcze zmienić wyświetlanie nazw map, żeby wyświetlało alfabetycznie.
Pobieram w ten sposób
  1. $wynik = mysql_query("SELECT distinct(mapa) FROM surf order by name asc limit 100") or die("Błąd w zapytaniu!");


wyświetla mi je tak
Kod
aim_map, surf_mountin_winter, surf_sx_darkness,  surf_cavern_final

I tak dalej

Czy to ma jakiś związek z "_"? pierwszą mapę wyświetla prawidłowo, resztę, które mają te same prefiksy nieprawidłowo.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.