プログラミング
逆引き
クライアントとの通信
VisMでの通信
Factoryでの通信
WebServiceでの通信
CSP (Cache' Server Pages)
Cache'SQL
設定・性能
|
【広告】
|
逆引きCache' Object ScriptCache' Object Script
文字列 数値 ファイル 日時 ユーティリティ
数値
Cache'の数値
「Cache'にはデータ型がない」と言われたりします。
…が、内部では実は色々なデータ型が存在しているようです。オブジェクトとか、リストとか…。
数値もその中のひとつです。
Cache'の数値には、いくつか独特のクセがあります。知らないとハマることがあるので、要注意です。
有効桁数
18桁。それ以上では桁落ちが発生する。
システムにとって必要のないゼロは除去される
-1〜1の間の少数は特に注意が必要です。
演算結果を出力する場合、-1〜1になる可能性があるならば、必ず$FNumber等で表示用に成形する必要があります。「 数値を表示形式に変換する」を参照してください。
> Set a=00147
> Write a //これは他の言語でも同様かと
147
> Set a=0.05000
> Write a // !
.05
> Set a=-0.00100
> Write a // !!
-.001
|
配列のキー部で自動的に数値型にされてしまう
配列のキー部に入れる場合、数値化が可能な文字列は数値化されてキーに格納されてしまいます。
$Orderで順番に取り出そうとしてもうまくいかないので、注意してください。
> S array("1A")=""
> S array("2B")=""
> ZWrite array //正しくソートされていることを確認
array("1A")=""
array("2B")=""
> S array("10")="" //引き続き...
> S array("20")=""
> ZWrite array //表示すると、数値化されているため期待した並びにならない
array(10)=""
array(20)=""
array("1A")=""
array("2B")=""
|
文字列から数値を得る
プラス記号を付けると、先頭から数値部分が取り出されます。
> Set a="42.195キロメートル"
> Write +a
42.195 |
外部からの入力の場合は、先に文字列のパターンマッチによるフォーマットチェックを実施することを強く勧めます。簡単な例を次に示します。
> Set a="2E1000"
> Write +a
W +a
^
<MAXNUMBER>
> if a'?1.N Write "数値ではない"
数値ではない
|
3桁ごとに , が入ったりすると、フォーマットチェックも難しくなってきます。そんな時は$INUMBERを使いましょう。
> Write $INumber("19,800",",")
19800
> Write $INumber("19,80,0",",") //3桁ごとの区切りの,が正しくないので<ILLIGAL VALUE>エラーが発生
<ILLEGAL VALUE>
> Write $INumber("1,980.55",",")
1980.55
> Write $INumber("19800.5.4", ",", "BAD")
//小数点が2回出現。第三引数が指定されているので<ILLIGAL VALUE>エラーは発生しない
BAD
|
文字列の途中に数値がある場合は、$ZStripで抽出することもできます。
> Write $ZStrip("東京ドーム12個分の","*E",,"0123456789.-") 12
四則演算
+ 足す、- 引く、* かける、/ 割る、\商、# 余り、** 累乗 演算は( )がない限り、全て左側から行われます。
> Write 2+3*4 //左から演算が実施されるので、先に2+3を実行
20
> Write 2+(3*4) // ()内が先に実行される
14
|
四捨五入
$NUMBER関数を使用します。$NUMBERの第2引数で小数点以下何桁の値が欲しいかを指定します。
> Write $Number(42.195,1) //四捨五入で小数点下1桁を要求
42.2
> Write $Number(42.195,2) //四捨五入で小数点下2桁を要求 42.20が得られ、表記上0が削られる
42.2
|
第2引数に0を指定すると整数が得られます。
> Write $Number(42.195,0) //四捨五入で整数を要求
42 |
第2引数に負の値nを指定すると 10^(ABS(n)) の位で丸められます。
> Write $Number(42.195,-1) //1の位を四捨五入
40
> Write $Number(512, -2) //10の位を四捨五入
500
|
整数部を取得、小数部を切り捨てる
$NORMALIZE(数値,-1)を使用します。
> Write $Normalize(42.195, -1)
42
> Write $Normalize(9.999, -1) //四捨五入ではない
9
|
商を求める \ 演算子を使って、1で割った時の値を使う方法もあります。
> Write 3.14\1 3
数値を表示形式に変換する
$FNumberを使って数値を表示用に整形します。
> Write $FNumber(1000000, ",") //3桁ごとに,を表示
1,000,000
> Write $FNumber(1000000, "E") //対数表示
1.000000E+06
> Write $FNumber(123456.123456, ",", 2) //小数部分2桁を残して四捨五入
123,456.12
> Write $FNumber(0.05000,",",3) //小数点より前の0を落とさない。小数点以下3桁まで表示
0.050
> Write $FNumber(-0.05000,",",3) //マイナスでも大丈夫
-0.050
|
数学関数いろいろ
関数 | 概要 |
$ZABS | 絶対値の関数です。 |
$ZARCCOS | 逆(アーク)コサイン関数です。 |
$ZARCSIN | 逆(アーク)サイン関数です。 |
$ZARCTAN | 逆(アーク)タンジェント関数です。 |
$ZCOS | コサイン関数です。 |
$ZCOT | コタンジェント関数です。 |
$ZCSC | コセカント関数です。 |
$ZEXP | 指数関数(自然対数の逆関数) |
$ZHEX | 16進数文字列を10進数値に、あるいは10進数値を16進数値に変換します。 |
$ZLN | 指定された数の自然対数を返します。 |
$ZLOG | 指定された正の数の式の、常用対数の値を返します。 |
$ZPOWER | ある数字に選択した数を累乗して返します。 |
$ZSEC | 指定された角度の三角関数のセカントを返します。 |
$ZSIN | 指定された角度の三角関数のサインを返します。 |
$ZSQR | 指定された数の平方根の値を返します。 |
$ZTAN | 指定された角度の三角関数のタンジェントを返します。 |
|
|