I\'m trying to work out why a larger problem is occurring, using a smaller program as an example. This smaller program does not work, leading me to believe it is my understa
This is because 5
is an integer (int
), and you're telling sprintf
to pretend that it's a double-precision floating-point number (double
). You need to change this:
sprintf(word,"%.9g", 5);
to either of these:
sprintf(word,"%.9g", 5.0);
sprintf(word,"%.9g", (double) 5);
Use 5.0
instead. 5
by itself is an integer and will get bitmangled into looking like a float, which is where your 7.xxxx comes from.
I see two problems:
As others already said, you have to specify a double
instead of an int
. Your compiler may have a switch to print out warnings in these cases (-Wall
in gcc, for example).
To print out 5.00...
, you should use %f
instead of %g
.
That gives sprintf(word,"%.9f", (double) 5);
as correct syntax.
Or you can change the descriptor format: "%.9d"