Flotante formato punto en printf ()
-
16-09-2019 - |
Pregunta
Tengo una serie de flotadores donde se almacenan los datos con distintos puntos decimales por lo que algunos son 123.40000
, 123.45000
, 123.45600
... ahora si quiero imprimir estos valores en la cadena sin los 0s en el extremo de printf()
para que se son 123.4
, 123.45
, 123.456
, sin esas 0s en el extremo. es posible? Si es así, ¿cómo?
Solución
Utilice el% g formateador:
printf( "%g", 123.4000 );
impresiones
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 );
}
Otros consejos
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);
}
Las devoluciones 124.0
.
float f = 124.123000;
if (f == (int) f) {
printf("%.1f\n", f); /* .1 can be changed */
} else {
printf("%g\n", f);
}
Las devoluciones 124.123
.
Use% g -
Imprimir un doble en la notación normal o exponencial, lo que sea más apropiado para su magnitud. 'G' utiliza letras minúsculas, 'G' utiliza letras mayúsculas. Este tipo difiere ligeramente de la notación de punto fijo en el que los ceros no significativos a la derecha del punto decimal no están incluidos. Además, el punto decimal no se incluye en números enteros.
Imprimir en una memoria intermedia (lo suficientemente grande). Imprimir la memoria ... y si el que no hay '.'
en el buffer de imprimir un punto.
char buf[100];
sprintf(buf, "%g", val);
printf("%s", buf);
if (strchr(buf, '.') == NULL) putchar('.');
editar
El estándar especifica la bandera #
:
# El resultado se convierte en una `` forma alternativa ''. [...] Para una, A, e, E, F, F, G, y las conversiones g, el resultado de la conversión de un punto flotante Número siempre contiene un carácter de punto decimal, aunque no hay cifras siguen eso. [...] para G y G conversiones, ceros a la derecha no se eliminan de el resultado. [...]
... pero te dan los ceros a la derecha: (