Tengo una matriz de flotantes donde los datos se almacenan con puntos decimales variables, algunos son 123.40000
, 123.45000
, 123.45600
... ahora si quiero imprimir estos valores en la cadena sin los 0 en el final en printf()
para que sean 123.4
, 123.45
, 123.456
, sin esos 0 al final. es posible? ¿Si es así, cómo?Formato de punto flotante en printf()
Respuesta
Utilice el% g formateador:
printf("%g", 123.4000);
grabados
123,4
ceros finales se eliminan, pero por desgracia lo es el punto decimal de salida si la parte fraccionaria es cero. No sé si en realidad hay alguna manera de hacer lo que desee directamente usando printf() - Creo que algo como esto es probablemente su mejor apuesta:
#include <stdio.h>
#include <math.h>
void print(FILE * f, double d) {
if (d - floor(d) == 0.0) {
fprintf(f, "%g.", d);
}
else {
fprintf(f, "%g", d);
}
}
int main() {
print(stdout, 12.0);
print(stdout, 12.300);
}
Uso% g -
Imprimir un doble en notación normal o exponencial, cualquiera que sea más apropiado para su magnitud. 'g' usa letras minúsculas, 'G' usa letras mayúsculas. Este tipo difiere ligeramente de la notación de punto fijo en que los ceros insignificantes a la derecha del punto decimal no están incluidos. Además, el punto decimal no está incluido en números enteros.
solo una pequeña consulta, ¿qué ocurre si quiero eliminar los ceros finales pero quiero mantener el decimal en números enteros, como 124.00000 es 123? – sfactor
No sé cómo hacky esto no es sino:
float f = 124.000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
devoluciones 124.0
.
float f = 124.123000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
Devoluciones 124.123
.
Imprima en un búfer (lo suficientemente grande). Imprima el búfer ... y si no hay '.'
en el búfer, imprima un punto.
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
edición
La norma especifica la bandera #
:
# El resultado se convierte en una `` forma alternativa ''. [...] Para las conversiones a, A, e, E, f, F, gy G, el resultado de convertir un número de coma flotante siempre contiene un carácter de punto decimal, incluso si no hay dígitos después de . [...] Para las conversiones g y G, los ceros finales no se eliminan del resultado . [...]
... pero te dan los ceros a la derecha :(
- 1. Formato de punto flotante Sphinx
- 2. Formato del número de punto flotante
- 3. formato de cadena para printf valores de coma flotante
- 4. Mostrar solamente el punto decimal si el componente de punto flotante no es .00 sprintf/printf
- 5. formato printf en .NET
- 6. Límites de punto flotante
- 7. Conversión de punto flotante a punto fijo
- 8. printf y reglas de formato
- 9. Codificación de punto flotante crudo
- 10. Comparación de punto flotante irreproducibilidad
- 11. Comparación de punto flotante en STL, BOOST
- 12. "Medio redondeado" en valores de punto flotante
- 13. punto flotante de doble precisión en CUDA
- 14. precisión de punto flotante en Visual C++
- 15. Especificador de formato de flotante a cadena
- 16. Punto flotante determinista y .NET
- 17. Java: Doble cuestión% de formato de printf
- 18. ¿Cómo convertir una medida mostrada en un formato arquitectónico en un punto flotante?
- 19. Texturas de punto flotante en OpenGL ES 2.0
- 20. Número de dígitos significativos para un tipo de punto flotante
- 21. Problemas de comparación de punto flotante MySQL
- 22. de impresión muy grandes números de punto flotante
- 23. Comprensión de los problemas de punto flotante
- 24. comparación de punto flotante de asignación constante
- 25. División de guión y de punto flotante
- 26. Signo de un número de punto flotante
- 27. Convierte de punto flotante de IBM a estándar de coma flotante IEEE y viceversa - ¿C#?
- 28. Convertir matriz de bytes de formato de audio wav al punto flotante
- 29. ¿Precisión arbitraria de punto flotante de Python disponible?
- 30. Comparando los valores de punto flotante
no es una mala idea comparar los dobles? "Si (d-piso (d) == 0.0)" ? – himself
@himself No, está bien cuando sabes lo que estás haciendo. "Nunca compares los números de punto flotante para' == '" es solo una aproximación para los menos sofisticados. –