我想将组织模式表中的字段格式化为货币 - 表示货币符号($)和逗号作为千位分隔符。我一直在使用$%。2f得到例如$ 1000.00但是如何获得逗号分隔符,例如$ 1,000.00?我有RTFM,但也许我太密集了,无法得到它。 calc或elisp公式都可以。见下面的样本表:
| Item | Quantity | Price | Ext |
|----------+----------+--------+----------|
| Widget 1 | 10 | 100.00 | 1000.00 |
| Widget 2 | 5 | 50.00 | 250.00 |
| Widget 3 | 1 | 5.00 | 5.00 |
|----------+----------+--------+----------|
| | | Total | $1255.00 |
#+TBLFM: $4=($2*$3);%.2f::@5$4=vsum(@2..@4);$%.2f
答案 0 :(得分:1)
我发现无法始终如一地执行此操作,因此您可以获得包含数千个分隔符的数字,而这些数字将被正确解释以进行进一步计算。所以这不是答案,只是为了记录我迄今为止的研究。
以下示例steals code用于格式化具有数千个分隔符的数字。 C-c C-c
用于定义函数的代码,或添加到init文件中。
然后,使用elisp计算总计,并使用新的格式化函数进行转换。
#+begin_src elisp :results none
(defun my-thousands-separate (num)
"Formats the (possibly floating point) number with a thousands
separator."
(let* ((nstr (number-to-string num))
(dot-ind (string-match "\\." nstr))
(nstr-no-decimal (if dot-ind
(substring nstr 0 dot-ind)
nstr))
(nrest (if dot-ind
(substring nstr dot-ind)
nil))
(pretty nil)
(cnt 0))
(dolist (c (reverse (append nstr-no-decimal nil)))
(if (and (zerop (% cnt 3)) (> cnt 0))
(setq pretty (cons ?, pretty)))
(setq pretty (cons c pretty))
(setq cnt (1+ cnt)))
(concat pretty nrest)))
#+end_src
| Item | Quantity | Price | Ext |
|----------+----------+------------+--------------|
| Widget 1 | 10 | 1001001.00 | 10010010.00 |
| Widget 2 | 5 | 501001.00 | 2505005.00 |
| Widget 3 | 1 | 51001.00 | 51001.00 |
|----------+----------+------------+--------------|
| | | Total | 12,566,016.0 |
#+TBLFM: $4=($2*$3);%.2f::@5$4='(my-thousands-separate (apply '+ '(@2..@4)));N
请注意,如果对行总计执行相同操作,则不能正确解释以逗号分隔的数字。
正确的方法应该是set the numeric locale并让printf做到这一点,但我不知道如何为emacs设置它。