Raised This Month: $51 Target: $400
 12% 

¿Cómo guardar un float bien?


  
 
 
Thread Tools Display Modes
Author Message
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 03-27-2013 , 09:53   ¿Cómo guardar un float bien?
#1

El problema que tengo es que cada vez que se guarda el float va cambiando de valores.

Caba aclarar que los valores que se le da a estos float tienen siempre 2 decimales

He buscado y mirado mi código muchas veces y no le veo la solución... si me puedieran ayudar:

PHP Code:
// Creando las variables float

new Float:g_hud_stats_x[33], Float:g_hud_stats_y[33]

//...
// Guardandolas
formatex(g_fdatacharsmax(g_fdata), "%.2f %.2f"g_hud_stats_x[id], g_hud_stats_y[id])
fvault_set_data(g_VaultColorsg_fkeyg_fdata)

//...
// Cargandolas
formatex(g_fdatacharsmax(g_fdata), "%.2f %.2f"g_hud_stats_x[id], g_hud_stats_y[id])
if (
fvault_get_data(g_VaultColorsg_fkeyg_fdatacharsmax(g_fdata)))
{
         
parse(g_fdataszHudStatXcharsmax(szHudStatX), szHudStatYcharsmax(szHudStatY))
         
         
g_hud_stats_x[id] = str_to_float(szHudStatX)
         
g_hud_stats_y[id] = str_to_float(szHudStatY)
}

//...
//Donde las utilizo
set_hudmessage(g_hudred[id], g_hudgreen[id], g_hudblue[id], g_hud_stats_x[id], g_hud_stats_y[id], g_hud_stats_t[id], 6.01.10.00.0, -1)
ShowSyncHudMsg(ID_SHOWHUDg_MsgSync2"Vitalidad: %s^nChaleco: %i^nClase: %s^nRango: %s^nFama: %d^nNivel: %d^nExperiencia: %s"add_point(pev(idpev_health)), get_user_armor(id), class, g_rangename[id], g_fame[id], g_level[id], add_point(g_experience[id])) 
Yo no veo nada raro, esto me pasa tanto en mysql como en el fvault

Last edited by baneado; 03-27-2013 at 13:33.
baneado is offline
Neeeeeeeeeel.-
Some Guy Yellin'
Join Date: Jul 2010
Location: Argentina
Old 03-27-2013 , 11:45   Re: ¿Cómo guardar un float bien?
#2

Mostrá como lo hacés en mysql.
Las estás cargando mal. Hacés un formatex para g_fdata y nunca lo usas. No mostras donde cargas los valores de szHudStatX y szHudStatY.
__________________

Last edited by Neeeeeeeeeel.-; 03-27-2013 at 11:47.
Neeeeeeeeeel.- is offline
Send a message via Skype™ to Neeeeeeeeeel.-
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 03-27-2013 , 13:39   Re: ¿Cómo guardar un float bien?
#3

Quote:
Originally Posted by Neeeeeeeeeel.- View Post
Mostrá como lo hacés en mysql.
Las estás cargando mal. Hacés un formatex para g_fdata y nunca lo usas. No mostras donde cargas los valores de szHudStatX y szHudStatY.
editado post principal, sí que lo uso lo que pasa que no lo puse aquí

MySQL:
PHP Code:
// Creando tabla
len 0
len 
+= formatex(g_motd[len], charsmax(g_motd) - len"CREATE TABLE IF NOT EXISTS `colours`(")
len += formatex(g_motd[len], charsmax(g_motd) - len"`User ID` varchar(32) NOT NULL, ")
len += formatex(g_motd[len], charsmax(g_motd) - len"`Character` varchar(32) NOT NULL, ")
len += formatex(g_motd[len], charsmax(g_motd) - len"`Hud Stat X` float NOT NULL DEFAULT '0.03', ")
len += formatex(g_motd[len], charsmax(g_motd) - len"`Hud Stat Y` float NOT NULL DEFAULT '0.02')")
    
SQL_ThreadQuery(g_SqlTuple,"QueryCreateTable"g_motd)

//...
// Guardandolos
formatex(g_querycharsmax(g_query), "UPDATE `%s` SET `Hud Stat X`='%.2f', `Hud Stat Y`='%.2f' WHERE `User ID`=^"%s^" AND `Character`=^"%s^""TABLE8g_hud_stats_x[id], g_hud_stats_y[id], user_id[id][1], g_playername[id])
SQL_ThreadQuery(g_SqlTuple"IgnoreHandle"g_query)

//...
// Cargandolos, después de hacer el query obviamente
if (SQL_NumResults(Query))
{
       
SQL_ReadResult(Query2g_hud_stats_x[id])
       
SQL_ReadResult(Query3g_hud_stats_y[id])


Last edited by baneado; 03-27-2013 at 13:42. Reason: php
baneado is offline
gladius
Veteran Member
Join Date: Jul 2008
Location: Santiago, Chile
Old 03-28-2013 , 08:16   Re: ¿Cómo guardar un float bien?
#4

Crea la tabla los float usando real.

Ex:
PHP Code:
"`Hud Stat X` real NOT NULL DEFAULT '0.03', "
y prueba.
__________________
Proyects
Kreedz Chile Mod [100%] (Fixing some details).


Last edited by gladius; 03-28-2013 at 08:17.
gladius is offline
Send a message via MSN to gladius Send a message via Skype™ to gladius
Kiske
Veteran Member
Join Date: May 2009
Old 03-28-2013 , 11:48   Re: ¿Cómo guardar un float bien?
#5

No los guardes con 2 decimales, por eso se te mueve.
Guardalo default, con %f.
__________________

Kiske is offline
Send a message via Skype™ to Kiske
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 03-28-2013 , 15:11   Re: ¿Cómo guardar un float bien?
#6

Quote:
Originally Posted by gladius View Post
Crea la tabla los float usando real.

Ex:
PHP Code:
"`Hud Stat X` real NOT NULL DEFAULT '0.03', "
y prueba.
Así guarda bien, pero qué hago en fvault ?

Quote:
Originally Posted by Kiske View Post
No los guardes con 2 decimales, por eso se te mueve.
Guardalo default, con %f.
Es lo mismo solo que guardando más decimales, a la larga se cambian los valores misteriosamente
baneado is offline
rak
Veteran Member
Join Date: Oct 2011
Location: banned country
Old 03-28-2013 , 18:07   Re: ¿Cómo guardar un float bien?
#7

en fvault estas guardando una cadena... el problema es q al pasar un float a una string este modifica ligeramente su valor y no hay forma posible de arreglarlo... me arme una funcion para pasar un float a string y tampoco; me modificaba ligeramente el valor
__________________

www.amxmodx-es.com

Steam: Luchokoldo
rak is offline
Send a message via MSN to rak Send a message via Skype™ to rak
MexPower
Veteran Member
Join Date: Nov 2012
Old 03-28-2013 , 18:17   Re: ¿Cómo guardar un float bien?
#8

Quote:
Originally Posted by KermesS View Post
Rauliitop encontré un problemita chiquito pero a la vez molesto...
Resulta que se puede mover el hud al gusto de cada uno y luego se guarda solo, hasta ahi va todo perfecto.
Pero a la hora de salir y volver a ingresar al servidor "SIEMPRE" me sale el hud un poquito mas arriba y a la izquierda de donde lo ubiqué, ocea no vuelve al lugar default, siempre donde lo acomode aparece un poco mas arriba y a la izquierda, como que se mueve en diagonal, no se porque será.
Yo nose de cordenadas de los huds de X, Y pero al momento de guardarlo le podrias restar a lo que puso por ejemplo lo guardo en 0.0 y -1 (recuerdo que nose de posiciones) y si se mueve arriba y a la izquierda se le suma cierto si le sumamos lo que se le sube arriba y a la izquiera le quedaria la posicion asi 0.5 y -1.5 entonces al momento de guardar lo que le ajusto restale lo que se le suma
variabledeloquepuso[id] - loquesesuma y asi lo guardas
__________________
Allied Modders En Español
MexPower is offline
Kiske
Veteran Member
Join Date: May 2009
Old 03-28-2013 , 19:11   Re: ¿Cómo guardar un float bien?
#9

Estas haciendo algo mal vos, yo guardo el valor con los 6 decimales (default) y al cargarlos me carga siempre en la misma posición, esté donde esté.
Y no es problema del str_to_float, porque yo también lo uso.


EDIT: No lo vi antes, tal vez es por la forma en la que los cargas, a mi también creo que se me movían al cargarlo de esa manera, proba así:
PHP Code:
       SQL_ReadResult(Query2Float:g_hud_stats_x[id])
       
SQL_ReadResult(Query3Float:g_hud_stats_y[id]) 
__________________


Last edited by Kiske; 03-28-2013 at 19:12.
Kiske is offline
Send a message via Skype™ to Kiske
baneado
Veteran Member
Join Date: Dec 2012
Location: amxmodx-es.com
Old 04-01-2013 , 13:07   Re: ¿Cómo guardar un float bien?
#10

Ahora que lo pude probar comento:

guardando los seis decimales más o menos funciona!

tan solo cambia el valor restándole 0.000001 más o menos cada 5 min
es decir, si yo tengo 0.02 a los 5 min tendré 0.019999

es un cambio que casi no se nota, pero que a la larga jode

No encontré otra solución!

EDIT: muchas gracias kiske

Last edited by baneado; 04-01-2013 at 13:08.
baneado is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 11:53.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode