Question

Cela fait un bon bout de temps que je n’utilise plus le langage de programmation D , et je l’utilise maintenant pour certains projets qui impliquent des calculs scientifiques.

J'ai beaucoup de données à virgule flottante, mais lorsque je les imprime avec writefln , les résultats sont les suivants: 4.62593E-172 , ce qui est un zéro! Comment utiliser le% de formatage de chaîne pour imprimer des éléments tels que 0?

En ce moment, j'utilise un hack:

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

cela fait le travail, mais je veux le faire en utilisant les opérations de formatage, si possible.

MISE À JOUR

quelqu'un a suggéré writefln ("%. 3f", a) , mais le problème est qu'il imprime des zéros inutiles, c'est-à-dire que 0 devient 0.000 et 1.2 devient 1.200
Puis-je également supprimer les zéros à la fin?

Était-ce utile?

La solution

Réponse courte: Cela ne peut pas être fait avec les spécificateurs de format printf.

Etant donné que D utilise la même mise en forme que le vsprintf () de C99, vous trouvez votre réponse dans ce fil: Évitez de terminer. zéros dans printf ()

Autres conseils

Essayez quelque chose comme

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

La réponse de Federico devrait fonctionner. Pour plus d'informations, consultez le format spécificateurs dans la section.

Je vois que vous utilisez actuellement Phobos, mais ce que vous essayez de faire est pris en charge dans Tango.

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

imprimera "1,20"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top