impression de nombres à virgule flottante en D
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?
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"