Я наткнулся на некоторый код со строкой, похожей на:
fprintf(fd, "%4.8f", ptr->myFlt);
В наши дни я мало работаю с C ++, я прочитал документацию по printf и тому подобному и узнал, что в этом случае 4 - это «ширина», а 8 - «точность». Ширина была определена как минимальное количество пробелов, занимаемых выводом, с заполнением начальными пробелами, если необходимо.
В таком случае, я не могу понять, какой будет точка шаблона типа "% 4.8f",
поскольку 8 (заполняемые нулями, если необходимо) десятичные дроби после точки уже гарантируют, что ширина 4 будет достигнута и превышена. Итак, я написал небольшую программу для Visual C ++:
// Formatting width test
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
printf("Need width when decimals are smaller: >%4.1f<\n", 3.4567);
printf("Seems unnecessary when decimals are greater: >%4.8f<\n", 3.4567);
printf("Doesn't matter if argument has no decimal places: >%4.8f<\n", (float)3);
return 0;
}
, который дает следующий вывод:
Need width when decimals are smaller: > 3.5<
Seems unnecessary when decimals are greater: >3.45670000<
Doesn't matter if argument has no decimal places: >3.00000000<
В первом случае точность меньше указанной ширины, и фактически добавляется начальный пробел. Однако, когда точность больше, ширина кажется избыточной.
Есть ли причина для такого формата?