関数索引
number() 関数は、文字列型のデータを数値型に変換します。
数値に変換したい文字列を与えます。ここで与える文字列は 10進数として有効なものでなければなりません。
文字列の先頭には符号を付けることができます。小数点以下を含め、桁数にはとくに制限はありません。末尾には "E{+|-}NN" 形式の指数部を付けることもできます。
テンプレートに「index」という目次型の要素が定義されているとします。この目次に掲載されている各ページは「章番号」という要素を持っているとします。「章番号」の値を数値として扱って「index」中のページをソートし、その章番号とページのタイトルを表示してみます。
<body>
......
<wr-for list='sort(index,"A","number(章番号)")' variable='x'>
%x.章番号%:%pageTitle(x)%<br/>
......
</wr-for>
.....
</body>
結果は、例えば下記のようになります。
......
chapter 1
chapter 2
chapter 11
chapter 22
......
number() を指定しているので章番号に入力されている値は数値として解釈されています。ソート結果は章番号の数値としての値の順になっています。
number() を使わずに、ソートの式に「章番号」を「list='sort(index,"A","章番号")'」のように直接指定すると、ソートの順序は下記のように辞書式になってしまいます。
......
chapter 1
chapter 11
chapter 2
chapter 22
......
この例では、list= の後ろの値の指定の部分には「"」(ダブルクオート)ではなく「'」(シングルクオート)を使っています。全体をシングルクオートで囲っておけばその内側にはバックスラッシュでクオートすることなくダブルクオートを記述できるので sort() に与える式の "A" や "number(章番号)" を記述するときに、煩雑にバックスラッシュを付けずに済みます。
普通に数値計算を行なう場合には、例えば「"123" + "456"」は文字列から数値への変換が自動的に行なわれるので、特に number() 関数を使う必要はありません。number() の出番は、主に、この例のように sort() と組み合わせる場合ではないでしょうか。