Возможны реализации, на которых (format nil "~,100F" x)
выполняет то, что вы хотите. Но в большинстве случаев это первое преобразует в float, а затем вычисляет цифры, которые теряют точность.
Непросто программировать свои собственные. Идея состоит в том, чтобы вычислить части до и после десятичной точки как целые числа отдельно. Вот мое предложение:
(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))))
Другой популярный реализация: Calc Дэйв Гиллеспи реализует произвольной точности с плавающей точкой в Elisp (что само по себе даже не имеет bigints!). – Ken