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
doublelugar de unint. Es posible que su compilador tenga un interruptor para imprimir advertencias en estos casos (por ejemplo,-Wallin gcc).Para imprimir
5.00..., debe usar%flugar de%g.
Eso da sprintf(word,"%.9f", (double) 5); como la sintaxis correcta.