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
と書かなくてはならない。理由は、ユーザー定義用に大文字を残してあるから、だそう。