Foros del Web » Programando para Internet » PHP »

función FPUTS

Estas en el tema de función FPUTS en el foro de PHP en Foros del Web. Resulta que estoy creando unas gráficas con flash chart a partir de una información que extraigo de una base de datos y almaceno en un ...
  #1 (permalink)  
Antiguo 19/12/2011, 10:27
 
Fecha de Ingreso: junio-2009
Mensajes: 29
Antigüedad: 15 años, 5 meses
Puntos: 0
Exclamación función FPUTS

Resulta que estoy creando unas gráficas con flash chart a partir de una información que extraigo de una base de datos y almaceno en un archivo, todo funcionaba bien, pero como es una información de financiera los valores han aumentado hasta el punto que cuando los almaceno en el archivo me sale hasta cierta cantidad de digitos y luego aparece un e+.
He tratado hacer el cast desde la consulta a la base de datos, he tratado de indicarle a la función fputs la cantidad de caracteres, he tratado de hacer conversiones con printf y sprintf pero nada funciona siempre el array que almacena el método fputs copia mal el dato y el flash chart no lo puede descifrar.
Por favor, si alguien sabe como puedo solucionar esto se los agradezco inmensamente, ya no sé que mas hacer
  #2 (permalink)  
Antiguo 19/12/2011, 20:59
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: función FPUTS

Sin ver tu código es difícil saber que hacer, pero podrías probar con round(), asignando una cantidad fija de decimales.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 20/12/2011, 15:08
 
Fecha de Ingreso: junio-2009
Mensajes: 29
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: función FPUTS

El número que recibo no es un decimal, es un entero.
Y pues no sé si el código sirva de mucho pero ahí lo añado.
En esta parte añado la información con la función FPUTS al archivo

Código PHP:
Ver original
  1. for ($i = 1; $i <= $tipo_grafica[1]; $i++) {
  2.   fputs($control, "$" . "datos$i = array($valores[$i]);");          
  3.   fputs($control, "\n");
  4. }

donde el array valores almacena los datos que me devolvió la consulta a la base de datos.
Y esta función JavaScript me crea la gráfica con Flash Chart partiendo de el archivo creado anteriormente

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.   swfobject.embedSWF("<? echo $configuracion['host'] . $configuracion['site'] .$configuracion['bloques']; ?>/tablero_comando/open-flash-chart.swf", "my_chart", "380", "200", "9.0.0", "expressInstall.swf", {"data-file":"<? echo $configuracion['host'] . $configuracion['site'] . $configuracion['bloques']; ?>/tablero_comando/graficas/<? echo $nombre_archivo_tendencia; ?>", "loading":"Cargando datos..."});
  3.                     </script>

y no es problema de enrutamiento ni de nada más es sólo de la longitud del dato, por que las otras gráficas me las crea perfectas. Espero que con esto me puedas ayudar un poco mas. Gracias de antemano
  #4 (permalink)  
Antiguo 20/12/2011, 15:17
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: función FPUTS

¿Nos puedes dar un ejemplo de un integer que en teoria se deberia mostrar y te sale con +e?

Ah, y de paso, si nos dices q te devuelve esto:

Código PHP:
echo PHP_INT_SIZE;
echo 
PHP_INT_MAX
Edit: Tb puedes probar a ponerlos en float y no integer, que suele tener más "recorrido" que un int ;)
__________________
>> Eleazan's Source
>> @Eleazan

Última edición por Eleazan; 20/12/2011 a las 15:29
  #5 (permalink)  
Antiguo 20/12/2011, 20:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: función FPUTS

Luego, también necesitas codificar correctamente, siempre que incluyas elementos de arrays en una cadena, debes encerrarlos entre llaves para que se interprete correctamente:

Código PHP:
Ver original
  1. fputs($control, "$" . "datos$i = array({$valores[$i]});");

Seguramente no va a corregir el error, pero sí te va a evitar futuros dolores de cabeza.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 21/12/2011, 09:53
 
Fecha de Ingreso: junio-2009
Mensajes: 29
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: función FPUTS

Eleazan:
Mira los valores que me devuelve el PHP_INT_SIZE = 4 y el PHP_INT_MAX = 2147483647.
Y el valor que debería almacenar es este 1571758392651 y queda así 1.57175839265e+12.
Triby:
Tendré en cuenta tu consejo, ya mismo lo corrijo!!
Muchas gracias por su ayuda!! =)
  #7 (permalink)  
Antiguo 21/12/2011, 11:47
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: función FPUTS

Intenta, en vez de usar integer, usar floats.

Así, probablemente, subsanaras ese error (tu php no puede usar enteros de esa forma xD)
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 21/12/2011, 13:46
 
Fecha de Ingreso: junio-2009
Mensajes: 29
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: función FPUTS

Pero tu me sugieres que ponga float desde la consulta en la base de datos o desde php que haga algún tipo de cast?? Que pena, no me quedó muy claro!
  #9 (permalink)  
Antiguo 21/12/2011, 16:28
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años, 7 meses
Puntos: 326
Respuesta: función FPUTS

Cuando los recibes a php, que sea a float, y no a int ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #10 (permalink)  
Antiguo 26/12/2011, 10:16
 
Fecha de Ingreso: junio-2009
Mensajes: 29
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: función FPUTS

Muchas gracias por su ayuda, no había respondido por que por las fechas navideñas andaba ocupada en otras cosas.
Tienen mucha razón y es algo muy lógico, esa debe ser la solución pero, sin embargo al recibir el valor como float no se modifica lo que recibo intente con
Código PHP:
Ver original
  1. $temporal=floatval($valores[$i]);
  2. $temporal=(float)$valores[$i];
  3. $temporal=(double)$valores[$i];
y $temporal es la variable que almaceno en el archivo, sin embargo ninguno de esos me quita esa bendita e+ de el valor.
Si saben otra manera o si lo estoy haciendo de manera equivocada les agradezco que me indiquen, que pena la molestadera.

Etiquetas: fputs
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:09.