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?

È stato utile?

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 "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top