Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Wyświetlenie wartości zmiennej typu float jako minuty:sekundy:ms
-gośc;)-
post
Post #1





Goście







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)
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


http://stackoverflow.com/questions/1298486...-datetime-mysql to powinno pomóc


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
-Gość-
post
Post #3





Goście







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.
Go to the top of the page
+Quote Post
Pawel_W
post
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


od tego masz przecież operator reszty z dzielenia...

http://stackoverflow.com/a/12985354
Go to the top of the page
+Quote Post
-Gość-
post
Post #5





Goście







Nie bardzo rozumiem. Podałeś ten sam link co w drugim poście.
btw. zmieniłem typ danych z float na double.
Go to the top of the page
+Quote Post
Pawel_W
post
Post #6





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #7





Goście







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)
Go to the top of the page
+Quote Post
Pawel_W
post
Post #8





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #9





Goście







Cytat(Pawel_W @ 2.01.2013, 14:25:21 ) *
co do minut i sekund - ucinasz część dziesiętną floata


Jak?
Go to the top of the page
+Quote Post
Pawel_W
post
Post #10





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


FLOOR()
Go to the top of the page
+Quote Post
-Gość-
post
Post #11





Goście







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?
Go to the top of the page
+Quote Post
Pawel_W
post
Post #12





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #13





Goście







  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
Go to the top of the page
+Quote Post
Pawel_W
post
Post #14





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


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 to the top of the page
+Quote Post
-Gość-
post
Post #15





Goście







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.
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 Aktualny czas: 20.08.2025 - 01:11