Pregunta

Ha pasado bastante tiempo desde la última vez que usé D Lenguaje de programación , y ahora lo estoy usando para algún proyecto que involucra cálculos científicos.

Tengo un montón de datos de coma flotante, pero cuando los imprimo usando writefln , obtengo resultados como: 4.62593E-172 que es un cero. ¿Cómo uso el formato de cadena% stuff para imprimir cosas como 0?

En este momento estoy usando un hack:

    if( abs(a) < 0.0000001 )
        writefln(0);
    else
        writefln(a);

hace el trabajo, pero quiero hacerlo usando las operaciones de formateo, si es posible.

UPDATE

alguien sugirió writefln ("%. 3f " ;, a) pero el problema es que imprime ceros innecesarios, es decir, 0 se convierte en 0.000 y 1.2 se convierten en 1.200
¿Puedo hacer que también elimine los ceros finales?

¿Fue útil?

Solución

Respuesta corta: Esto no se puede hacer con los especificadores de formato printf.

Dado que D usa el mismo formato que vsprintf () de C99, encontrará su respuesta en este hilo: Evite el rastreo ceros en printf ()

Otros consejos

Pruebe algo como

writefln("%.3f", a);

La respuesta de Federico debería funcionar, para obtener más información, consulte el formato especificadores sección.

Veo que actualmente está usando Phobos, sin embargo, lo que está tratando de hacer es compatible con Tango.

Stdout.formatln("{:f2}", 1.2);

imprimirá " 1.20 "

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