Printf переменное число десятичных знаков в float
Я нашел интересный формат для печати бесконечных строк фиксированной длины следующим образом:
char newstr[40] = {0};
sprintf(newstr,"%.*s", sizeof(mystr), mystr);
Итак, я думаю, может быть, есть путь под командой printf для печати числа с плавающей точкой...
"% 8.2f"
чтобы иметь возможность выбирать число десятичных знаков с целым числом.
Что-то вроде этого:
sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)
EDIT - Решение:
(для округления и очистки числа с плавающей точкой до желаемой точности).
int precision = 2;
char kolf[16] = {0};
sprintf(kolf, "%8.*f", precision, mystruct.myfloat);
float kol = atof(kolf);
Ответы
Ответ 1
Вы также можете использовать ".*"
с плавающими точками, см. также http://www.cplusplus.com/reference/cstdio/printf/ (относится к С++, но спецификаторы формата похожи)
.number: для спецификаторов a, A, e, E, f и F: это число цифр, которое должно быть после десятичной точки (по умолчанию это 6).
...
. *. Точность не указана в строке формата, а как дополнительный аргумент целочисленного значения, предшествующий аргументу, который должен отформатировать.
Например:
float floatnumbervalue = 42.3456;
int numberofdecimals = 2;
printf("%.*f", numberofdecimals, floatnumbervalue);
Вывод:
42.35
Ответ 2
Для этого также можно использовать звездочку, как для ширины поля, так и для точности:
printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue);
См. эта ссылка.