Ci possono essere implementazioni su cui (format nil "~,100F" x)
fa quello che vuoi. Ma per la maggior parte questo prima si converte in un float, quindi calcola i numeri, che perde precisione.
Non è troppo difficile da programmare. L'idea è di calcolare le parti prima e dopo il punto decimale come numeri interi separatamente. Ecco la mia proposta:
(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))))
Un'altra implementazione popolare: Calc di Dave Gillespie implementa precisione arbitraria virgola mobile in Elisp (che di per sé non ha nemmeno bigints!). – Ken