imprimir números de coma flotante en D
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?
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 "