Rails でいう number_to_currency みたいなやつは
(format nil "~:D" 120000) ; => 120,000
でできる。
ここの解説がわかりやすかった 。
(format nil "~10,'_,'.,4:D" 120000) ; => ___12.0000
padchar と commachar は '_ のようにシングルクォート一個の前置で書くようだ。理由はよくわからなかった。 ~D と書いても ~d と書いてもよいようだ(大文字小文字どちらでも結果は変わらない)
Emacs Lisp の format は書式が全然違う (sprintf に似ている)ので同じようなことはできそうになかった。
追記:
シングルクォートの件と大文字小文字の件はどちらもドキュメントに書いてあった。
The case of the directive character is ignored. Prefix parameters are notated as signed (sign is optional) decimal numbers, or as a single-quote followed by a character.
Emacs Lisp ビルトインの format 関数は Common Lisp の format 関数とは別物だが、 marmalade に cl-format という移植版があった。
https://marmalade-repo.org/packages/cl-format
(require 'package) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t) (package-initialize) (require 'cl-format) (cl-format nil "~:d" 120000) ; => "120,000"
なお cl-format のほうは directive の大文字小文字を区別する。 ~D はダメで ~d と書かなくてはならない。理由は、ユーザー定義用に大文字を残してあるから、だそう。