Il peut y avoir des implémentations sur lesquelles (format nil "~,100F" x)
fait ce que vous voulez. Mais sur la plupart de ces convertis d'abord à un flotteur, puis calcule les chiffres, ce qui perd de la précision.
Ce n'est pas trop difficile de programmer le vôtre. L'idée est de calculer séparément les parties avant et après le point décimal. Voici ma proposition:
(defun number->string-with-fixed-decimal-places (x width &optional stream)
"Print an approximation of <x> with <width> digits after the decimal point."
(multiple-value-bind (int dec) (truncate x)
(let ((dec-shifted (truncate (* (abs dec) (expt 10 width)))))
(format stream "~d.~v,vd" int width #\0 dec-shifted))))
Une autre implémentation populaire: Calc de Dave Gillespie implémente un flottant de précision arbitraire dans Elisp (qui lui-même n'a même pas de bigints!). – Ken