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?

¿Fue útil?

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.

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);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top