Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Pobieranie float z bazy danych


Najlepsza odpowiedź Kowalsky, 06.11.2015 23:50

Dzięki za odpowiedź. Poradziłem sobie w dość nietypowy sposób minutę przed tym jak napisałeś :)

		new Float:tempPKT
		new Float:tempDMG;

		SQL_ReadResult(Query, iColPkt, tempPKT)
		SQL_ReadResult(Query, iColDamage, tempDMG)

		PunktyGracza[id] = tempPKT
		Obrazenia[id] = tempDMG

i działa ;)
 
@edit
Ale pojawił się inny problem. Pobieram sobie to i...

SELECT * FROM `xxx` ORDER BY `pkt` DESC;

sortuje

  • 8,34
  • 5,15
  • 5,06
  • 5,03
  • 405,53
  • 34,09
  • 20,64

A z matematycznego punktu widzenia 405,53 > 8,34. No i co teraz? :D

 

@edit2

 

Problem rozwiązany przy użyciu typu DECIMAL(65,2) :)

 

Ale jestem mądry

i skromny

Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 Kowalsky

    master of disaster

  • Użytkownik

Reputacja: 136
Zaawansowany

  • Postów:424
  • Lokalizacja:San José
Offline

Napisano 05.11.2015 21:28

Witam, przejdę od razu do tematu ;) Mam w swoim kodzie dwie zmienne typu float:

new Float:Obrazenia[33];
new Float:PunktyGracza[33];

które przechowuje w bazie danych. Przy rozłączaniu gracza zapisuje się poprawnie, lecz gdy gracz wchodzi nie pobiera tych wartości. Człowiek od początku musi to nabijać, bo ma zero.
 

Do zmiennej pobieram w ten sposób:

		iColPkt = SQL_FieldNameToNum(Query, "pkt")
		iColDamage = SQL_FieldNameToNum(Query, "damage")

		PunktyGracza[id] = SQL_ReadResult(Query, iColPkt)
		Obrazenia[id] = SQL_ReadResult(Query, iColDamage)

Zrobiłem sobie taki mały debug dodając pod spodem:

        log_amx("2. POBRANO: Punkty: %.2f | Obrazenia: %.3f", PunktyGracza[id], Obrazenia[id])

I w logach pokazuje wartości odpowiednio 0.00 i 0.000. Co może być nie tak, gdzie szukać problemu?

 

btw. oczywiście mógłbym to przemnożyć przez 100 i 1000 przed zapisem, a potem przy odczycie podzielić, ale zależy mi aby w bazie danych były zmiennoprzecinkowe wartości.

 

Pola w bazie danych to varchar o długości 255.


  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 06.11.2015 22:52

Skoro jest to varchat zastosuj http://amxx.pl/dokum...74/str-to-float


  • +
  • -
  • 1

#3 Kowalsky

    master of disaster

  • Autor tematu
  • Użytkownik

Reputacja: 136
Zaawansowany

  • Postów:424
  • Lokalizacja:San José
Offline

Napisano 06.11.2015 23:50   Najlepsza odpowiedź

Dzięki za odpowiedź. Poradziłem sobie w dość nietypowy sposób minutę przed tym jak napisałeś :)

		new Float:tempPKT
		new Float:tempDMG;

		SQL_ReadResult(Query, iColPkt, tempPKT)
		SQL_ReadResult(Query, iColDamage, tempDMG)

		PunktyGracza[id] = tempPKT
		Obrazenia[id] = tempDMG

i działa ;)
 
@edit
Ale pojawił się inny problem. Pobieram sobie to i...

SELECT * FROM `xxx` ORDER BY `pkt` DESC;

sortuje

  • 8,34
  • 5,15
  • 5,06
  • 5,03
  • 405,53
  • 34,09
  • 20,64

A z matematycznego punktu widzenia 405,53 > 8,34. No i co teraz? :D

 

@edit2

 

Problem rozwiązany przy użyciu typu DECIMAL(65,2) :)

 

Ale jestem mądry

i skromny


Użytkownik Grzegorz K. edytował ten post 07.11.2015 00:19

  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych