//gcc -Wall formfloat.c -o formfloat `pkg-config --libs --cflags gtk+-2.0` #include #include #include //#include #include // pour glib ? void formfloat(char *ss,double ff) // sup decimales a 0 et ., si besoin { int i,j,ll; char *s1 = ss; sprintf(s1,"%f",ff); ll=strlen(s1); for ( i = ll-1; i >0; --i) { if ( s1[i] == '0') { s1[i] = '\0'; j = i -1; if ( s1[j] == '.' || s1[j] == ',') { s1[j] = '\0'; break; } } else break; } } int main(int argc, const char *argv[]) { int i; double fl; char ss[20]; char sp[]="1234.5678901"; char sv[]="1234,5678901"; fl = 10.31313002; for ( i=1; i<10; ++i) { formfloat(ss,fl); printf("i=%d fl=%f s= '%10s'\t %d\n",i,fl,ss,(int)strlen(ss)); fl /= 5; } printf("\n"); // virgules fl = 10,31313002; for ( i=1; i<10; ++i) { formfloat(ss,fl); printf("i=%d fl=%f s= '%10s'\t %d\n",i,fl,ss,(int)strlen(ss)); fl /= 5; } printf("\n"); fl = g_strtod(sp,NULL); formfloat(ss,fl); printf("point fl=%f s= '%10s'\t %d\n",fl,ss,(int)strlen(ss)); printf("\n"); fl = g_strtod(sv,NULL); formfloat(ss,fl); printf("virgule %s fl=%f s= '%10s'\t %d\n",sv,fl,ss,(int)strlen(ss)); printf("\n si strlen(ss) >= 20 le prog devrait planter\n\n"); fl = 12345.678901; for ( i=1; i<15; ++i) { formfloat(ss,fl); printf("i=%d fl=%f s= '%10s'\t long_ss=%d\n",i,fl,ss,(int)strlen(ss)); fl *= 100; } return (EXIT_SUCCESS); }