ToraToraWiki

時点の ToraToraWikiManual/ja/Wiki/Calc のソース

&title 数値計算

*概要
ToraToraWikiにはWiki記法中に式を書くことでその式の値を計算する数値計算機能があります.
数値計算機能を使うには以下のように行頭に&=を書く方法と&&calcを使う方法があります.

 = 式

 &calc{式}

行頭に&=を書く方法は箇条書きとして扱われ,複数続けて書くことができます.
&calcの方は文中で計算を行う際に使用します.

*式

式の中の数値は1,000のように&,で桁の区切りがされていてもかまいません.
式の中では以下の演算子, 関数, 定数 が使えます.
関数に複数の引数を渡す場合は式を&&で区切ります.

- 演算子
-- 四則演算 &+, &-, &*, &/
-- 剰余算 &%
-- べき乗 &^
-- 代入 &=
- 関数
-- 三角関数 sin(x), cos(x), tan(x)
-- 対数 log(x), log(base & x) 
-- 四捨五入 round(x), round(x & 桁数) 
-- 切り上げ ceil(x)
-- 切り捨て floor(x)
-- 最小 min(a & b & c & ..)
-- 最大 max(a & b & c & ..)
-- 合計 sum(a & b & c & ..)
-- 平均 average(a & b & c & ..)
- 定数
-- 円周率 pi
-- 自然対数の底 e

例えば以下のように使用できます.

&wikiexample{
= (1 + 2) * 3 ^ 2 / 4
&calc{ sin(pi/4) + cos(pi/4) + log(2 & 1024) }
}

数式内の&[と&]で囲まれた部分は無視されます.
これは以下のように単位や説明を記載するために使用できます.

&wikiexample{= 1,000[ml] * 20[本] / 1000[L換算]}

通常は式を書くとその式の計算結果に置き換わります.
式の最後に&=を書くと結果を置き換えずに数式と結果の両方を表示します.

&wikiexample{
= (1 + 2) * 3 ^ 2 / 4 =
= 1,000[ml] * 20[本] / 1000[L換算] = [L]
}

*変数
以下のように記述することで変数が使用できます.変数は代入後,同一ページ内で有効です.
&wikiexample{
= foo = 2 + 5
= foo * 20 =
}

代入の演算は代入した値を演算結果とするので上記の最初の式は7と表示されます.
式の値が重要でない計算(副作用が重要な計算)をする場合は&=に続けて&:を記述すると結果が表示されなくなります.
&wikiexample{
=: foo = 10
= foo * 20 =
}

*パラメータ
以下のように書くことで数値計算の挙動をカスタマイズすることもできます.
 =(パラメータ) 式
 &calc(パラメータ){ 式 }

パラメータには以下の指定ができます.複数指定する場合はカンマで区切ります.
:round=桁数|指定された桁数で小数点以下の四捨五入をします.デフォルトは2です.
:{comma|結果をコンマ区切りの数値で表示します.
式中にコンマ区切りの数値が使用されていた場合は自動で指定されます.}
:!comma|結果をコンマ区切りの数値で表示しないようにします.
:replace|式を結果で置き換えます.デフォルトで指定されています.
:!replace|式を結果で置き換えずに式と結果を表示するようにします.
:result|結果を表示します.デフォルトで指定されています.
:{!result|結果を表示しません.変数への代入等の副作用のみが必要な場合に指定します.
行頭に&=&:とした場合と同等の効果が得られます.}

*表計算

表のセル内で最初に&=を書き,続いて式を書くと
表計算のように使用することができます.
表の中でも通常の演算子や関数が使えますが,さらに以下のような変数,関数が使用できます.

:A1, B2のようなセルの番号|大文字のみ有効,セルの番号はセルの上でマウスカーソルを止めておくと表示されます
:A1:C3のようなセル番号での範囲|大文字のみ有効
:up|現在のセルから見て上方向のセルすべて
:up(n & m)|上方向にn個のセルをとばしてm個のセル(mが省略された場合はmは無限扱い)
upと同様にdown,left,rightも同様に使用できます.

&wikiexample{
|名前    |国語        |数学        |英語        |合計           |hc
|鈴木一郎|90          |70          |80          |=sum(left(0&3))|lr
|佐藤二郎|50          |75          |100         |=sum(left(0&3))|
|田中三郎|60          |100         |30          |=sum(left(0&3))|
|平均    |=average(up)|=average(up)|=average(up)|=average(up)   |f
|最高得点|=max(up(1)) |=max(up(1)) |=max(up(1)) |=max(up(1))    |f
}

ドキュメント

ダウンロード