With a little modf help modf you can use %g to skip trailing zeros and \b to skip trailing zeros:
#include <stdio.h> #include <math.h> int main(void) { int i, iarr[] = {-4, -3, -2, -1, 0, 1, 2, 3, 4}; double darr[] = {0.0001, 0.001, 0.01, 0.1, 1., 10., 100., 1000., 10000.}; double intpart, fractpart; for (i = 0; i < 9; i++) { fractpart = modf(darr[i], &intpart); if (fractpart == 0.0) printf("%10d%10d.0\n", iarr[i], (int)intpart); else printf("%10d%10d\b%g\n", iarr[i], (int)intpart, fractpart); } return 0; }
Output:
-4 0.0001 -3 0.001 -2 0.01 -1 0.1 0 1.0 1 10.0 2 100.0 3 1000.0 4 10000.0
source share