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?
@edit2
Problem rozwiązany przy użyciu typu DECIMAL(65,2)
Ale jestem mądry
i skromny
Przejdź do postu
Kowalsky
05.11.2015
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.
Najlepsza odpowiedź
Kowalsky
06.11.2015
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?
@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