Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

349
Vistas
¿Cómo controlar el número de dígitos del exponente después de 'e' en C printf %e?

Quiero controlar la cantidad de dígitos de exponente después de 'e' en C printf %e ?

Por ejemplo, C printf("%e") da como resultado 2.35e+03 , pero quiero 2.35e+003 , necesito 3 dígitos de exponente, ¿cómo uso printf ?

Código:

 #include<stdio.h> int main() { double x=34523423.52342353; printf("%.3g\n%.3e",x,x); return 0; }

Resultado: http://codepad.org/dSLzQIrn

 3.45e+07 3.452e+07

deseo

 3.45e+007 3.452e+007

Pero, curiosamente, obtuve los resultados correctos en Windows con MinGW.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

"...El exponente siempre contiene al menos dos dígitos, y solo tantos dígitos más como sea necesario para representar el exponente. ..." C11dr §7.21.6.1 8

Entonces 3.45e+07 cumple (lo que OP no quiere) y 3.45e+007 no cumple (lo que OP quiere).

Como C no proporciona una forma estándar para que el código altere el número de dígitos del exponente, el código debe valerse por sí mismo.

Varios compiladores admiten cierto control.

estudio visual _set_output_format

Por diversión, el siguiente es un código de bricolaje

 double x = 34523423.52342353; // - 1 . xxx e - EEEE \0 #define ExpectedSize (1+1+1 +3 +1+1+ 4 + 1) char buf[ExpectedSize + 10]; snprintf(buf, sizeof buf, "%.3e", x); char *e = strchr(buf, 'e'); // lucky 'e' not in "Infinity" nor "NaN" if (e) { e++; int expo = atoi(e); snprintf(e, sizeof buf - (e - buf), "%05d", expo); // 5 more illustrative than 3 } puts(buf); 3.452e00007

También vea c ++ cómo obtener "exponente de un dígito" con printf

over 4 years ago · Santiago Trujillo Denunciar

0

prototipo de etiquetas de formato printf :

 %[flags][width][.precision][length]specifier

la precisión

... Esto da ... el número de dígitos que aparecerán después del carácter base para las conversiones a, A, e, E, f y F ... .

Está utilizando la conversión y el especificador de precisión correctamente, la diferencia está en las implementaciones de la función de biblioteca C y los entornos en los diferentes sistemas. La precision especifica el número de dígitos después de '.' (punto, punto, etc.). No establece el número de caracteres que representan la exponenciación. El hecho de que proporciona 3 digits en Windows es solo la forma en que Windows especifica el formato, no la forma en que la biblioteca estándar de C especifica que funcionará printf .

Sería necesario comparar cómo difieren las implementaciones de origen para ver en qué se basa esa parte de la cadena de formato. (Probablemente se reducirá a alguna oscura diferencia en la forma en que se definen o especifican los entornos de Windows v. Linux/Unix/locale/etc.)

over 4 years ago · Santiago Trujillo Denunciar

0

char *nexp(double x, int p, int n) // Number with p digits of precision, n digits of exponent. { const int NN=12; static char s[NN][256];//(fvca) static int i=-1; int j,e; i=(++i)%NN; // Index of what s is to be used... sprintf(s[i],"%.*lE", p,x); // Number... for(j=0; s[i][j]; j++) if(s[i][j]=='E') break; // Find the 'E'... if(s[i][j]=='E') // Found! { e= atoi(s[i]+j+1); sprintf(s[i]+j+1, "%+0*d", n+1,e); return s[i]; } else return "***"; } // Best Regards, GGa // G_G
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda