3.5.2 Calc的公式语法 :使用Calc计算

一个公式可用是任何能够被Emacs的'calc'包所识别的代数表达式. 注意,在'Calc'中,'/'的操作符优先级要比'*'低,因此'a/b*c'会被解释为'a/(b*c)',这一点与标准不符. 在calc-eval(参见GNUEmacs Calc Manual中'Calling Calc from Your Lisp Programs'章节的)进行计算之前,变量替换会以之前所描述的方式发生. 公式之中的区域变量可用直接放入Calc的向量函数(例如'vmean'和'vsum')中作为参数使用.

公式可用在分号之后附加上可选的选项模式字符串. 这种选项模式字符串由标志所组成,这些标志会在公式被执行时影响Calc和其他模式. 默认情况下,Org使用标准的Calc模式(精度为12位,角度单位为度,分数和symbolic模式为关闭状态). 然而,公式在显示时,会自动调整为(float 8)以便保持表格的紧凑. 可用通过变量'org-calc-default-modes'来配置这些默认设置

p20           set the internal Calc calculation precision to 20 digits
n3 s3 e2 f4   Normal, scientific, engineering, or fixed
              format of the result of Calc passed back to Org.
              Calc formatting is unlimited in precision as
              long as the Calc calculation precision is greater.
D R           angle modes: degrees, radians
F S           fraction and symbolic modes
N             interpret all fields as numbers, use 0 for non-numbers
E             keep empty fields in ranges
L             literal

除非你使用大整数或高精度计算式,并且需要显示浮点式数字,你可以提供一个printf格式说明字符串32来对Calc计算并传回Org的结果进行重新格式化,而不是Calc自己作这种格式化. 下面是一些例子

$1+$2                Sum of first and second field
$1+$2;%.2f           Same, format result to two decimals
exp($2)+exp($1)      Math functions can be used
$0;%.1f              Reformat current cell to 1 decimal
($3-32)*5/9          Degrees F -> C conversion
$c/$1/$cm            Hz -> cm conversion, using ‘constants.el’
tan($1);Dp3s1        Compute in degrees, precision 3, display SCI 1
sin($1);Dp3%.1e      Same, but use printf specifier for display
vmean($2..$7)        Compute column range mean, using vector function
vmean($2..$7);EN     Same, but treat empty fields as 0
taylor($3,x=7,2)     Taylor series of $3, at x=7, second degree

Calc还包含了一个完整的逻辑操作集合. 例如

if($1<20,teen,string(""))            如果第一列(age列)比20小,则返回值"teen",否则返回空值

注意,在计算时长时,还可以使用两个特定的标志T和t,具体参见时长与时间