stampa di numeri in virgola mobile in D
Domanda
È passato un po 'di tempo dall'ultima volta che ho usato linguaggio di programmazione D , e ora lo sto usando per alcuni progetti che prevedono calcoli scientifici.
Ho un sacco di dati in virgola mobile, ma quando li stampo usando writefln
, ottengo risultati come: 4.62593E-172
che è zero! Come posso usare% formattazione di stringa per stampare cose come 0?
In questo momento sto usando un hack:
if( abs(a) < 0.0000001 )
writefln(0);
else
writefln(a);
fa il lavoro, ma voglio farlo usando le operazioni di formattazione, se possibile.
Aggiorna
qualcuno ha suggerito writefln ("%. 3f " ;, a)
ma il problema è che stampa zero extra inutili, cioè 0
diventa 0.000
e 1.2
diventa 1.200
Posso farlo anche rimuovere gli zeri finali?
Soluzione
Risposta breve: questo non può essere fatto con gli identificatori del formato printf.
Poiché D utilizza la stessa formattazione del vsprintf ()
di C99, trovi la tua risposta in questa discussione: Evita il trascinamento zero in printf ()
Altri suggerimenti
Prova qualcosa del genere
writefln("%.3f", a);
La risposta di Federico dovrebbe funzionare, per ulteriori informazioni controlla il specifica .
Vedo che stai attualmente utilizzando Phobos, tuttavia ciò che stai cercando di fare è supportato in Tango.
Stdout.formatln("{:f2}", 1.2);
stamperà " 1.20 "