Cómo usar "%f" para completar un valor doble en una cadena con la precisión correcta
-
09-06-2019 - |
Pregunta
Estoy intentando completar una cadena con un valor doble usando un sprintf
como esto:
sprintf(S, "%f", val);
Pero la precisión se reduce a seis decimales.Necesito unos 10 decimales para la precisión.
¿Cómo se puede lograr eso?
Solución
%[ancho].[precisión]
El ancho debe incluir el punto decimal.
%8.2 significa 8 caracteres de ancho;5 dígitos antes del punto y 2 después.Un carácter está reservado para el punto.
5 + 1 + 2 = 8
Otros consejos
Lo que quieres es un modificador:
sprintf(S, "%.10f", val);
man sprintf tendrá muchos más detalles sobre los especificadores de formato.
Para una referencia más completa, consulte la Wikipedia imprimirf artículo, sección "marcadores de posición en formato printf" y un buen ejemplo en la misma página.
Tenga cuidado: la salida de sprintf variará según la configuración regional C.Esto puede ser o no lo que quieres.Consulte LC_NUMERIC en los documentos locales/páginas de manual.
%f
es para valores flotantes.
Intenta usar %lf
en cambio.Está diseñado para dobles (que antes se llamaban flotadores largos).
doble x = 3.14159265;
printf("15.10lf
", x);