me encontré con algo de código con una línea parecida a:¿Cuál es el punto de un ancho más pequeño que una precisión en printf()?
fprintf(fd, "%4.8f", ptr->myFlt);
No trabajar con C++ mucho en estos días, leí el documento en printf y su calaña, y aprendí que en este caso 4 es el "ancho" y 8 es la "precisión". El ancho se definió como mínimo cantidad de espacios ocupados por la salida, relleno con espacios en blanco iniciales si es necesario.
Siendo ese el caso, no puedo entender cuál sería el punto de una plantilla como "% 4.8f", ya que los 8 decimales (cero acolchado si es necesario) después del punto ya aseguran que el ancho de 4 fue cumplido y excedido. Por lo tanto, he escrito un pequeño programa, en 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;
}
que da el siguiente resultado:
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<
En el primer caso, la precisión es menor que el ancho especificado, y de hecho, un líder se agrega espacio Sin embargo, cuando la precisión es mayor, el ancho parece redundante.
¿Hay alguna razón para un formato de esa manera?
No, no hay ninguna razón. Si necesito algo así, uso '% 0.8f' para que sea obvio que no me importa cuántos dígitos están a la izquierda del punto decimal. –
Apuesto a que el programador original pretendía que el formato especificara la salida formateada de la siguiente manera: '1234.87654321'. Si estuviera inventando 'printf()' así es como podría haberlo hecho (y crear algunos otros caracteres para manejar el ancho y la precisión generales para formatos de punto no flotante). –
¿Por qué etiqueta esto 'C++' en lugar de 'c'? – leftaroundabout