Для первой формы, что-то вроде:
buf[0] = '0';
for (i=0; i<8 && buf[0]=='0'; i++)
snprintf(buf, sizeof buf, "%10.*f", i, x);
Вы можете немного ускорить поиск с помощью log10(x)
, но вам все равно придется проверить как минимум два значения i
, так как округление может изменить количество необходимых цифр, и вычислить это так же сложно, как переопределить printf
.
Для второй формы что-то вроде:
for (i=0; i<8 && snprintf(buf, sizeof buf, "%.*f", i, x)<10; i++)
;