mplab - sprintf pro c
Uso simple de sprintf-C (4)
Esto se debe a que 5
es un entero ( int
), y le está diciendo a sprintf
que finja que es un número de punto flotante de doble precisión ( double
). Necesitas cambiar esto:
sprintf(word,"%.9g", 5);
a cualquiera de estos
sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
Estoy tratando de averiguar por qué ocurre un problema más grande, usando un programa más pequeño como ejemplo. Este programa más pequeño no funciona, lo que me lleva a creer que mi comprensión de la función es defectuosa.
Por lo que creía, el siguiente programa debería inicializar una cadena con hasta 30 caracteres, luego tomar el número ''5'' a nueve cifras significativas y convertirlo en esa cadena. El programa debería imprimir el valor ''5.00000000''. Sin embargo, el programa imprime el valor 7.96788 (...). ¿Por qué es esto?
#include <stdio.h>
int main()
{
char word[30];
sprintf(word, "%.9g", 5);
printf(word);
return 0;
}
O puede cambiar el formato del descriptor: "%.9d"
Utilice 5.0
lugar. 5
por sí mismo es un número entero y se verá enredado para que parezca un flotador, que es de donde proviene su 7.xxxx.
Veo dos problemas:
Como ya han dicho otros, debe especificar un
double
lugar de unint
. Es posible que su compilador tenga un interruptor para imprimir advertencias en estos casos (por ejemplo,-Wall
in gcc).Para imprimir
5.00...
, debe usar%f
lugar de%g
.
Eso da sprintf(word,"%.9f", (double) 5);
como la sintaxis correcta.