Get As Number Type (Targetted JSON Pointer)
数値型で値取得
ASTER::EXPRESSION::JSON
::Get as Number Type
using Targeted JSON Pointer..
事前にターゲット指定された配列から要素指定して、値を「数値」として取得する。
数値型以外に Boolean 型もキャストした値を取得できます。
true == 1
false == 0
文字列型として登録されているデータも数値として取得します.
数値型は JSON の仕様だと整数( Int )、浮動小数点数 ( Float | Double ) ですが、CF25 の仕様に沿って ASTER は浮動小数点数は Float 型までのサポートになります。
Float 型は 7 桁まで表現可能、しかし整数部と小数点数部を合計し 7 桁なので、実際の表現可能範囲はかなり狭いものになります。
Int 型の上限は 2'147'483'647 == 2147483647 を確認してあります。
パラメータ .1
事前に JSON が以下データ内容でメモリ上に展開されているという前提で配列要素を指定
{
"test":[
[
-100,
"2147483647",
19.0E-2,
19.0E-5,
19.0E-6,
true
]
]
}
- e.g. “/test/0” » ターゲットに配列型 test[0] が指定された
- e.g. 0 » test[0][0] から値取得 == -100 が戻り値
- e.g. 1 » 2147483647 は int 型の上限
- e.g. 2 » 19.0E-2 は科学的表記法、値は 0.19
- e.g. 3 » 19.0E-5 は科学的表記法、値は 0.00019
- e.g. 4 » 19.0E-6 は float 上限を超えたので値 19.0E-5
- e.g. 5 » Boolean はキャストされ true は 1
注意点.1
E-5
は科学的表記法、E^-5
という意味です。
19.0 * 10 ^ -5 なので
19.0 * 0.000009999999999999999 == 0.00018999999999999998 が浮動小数点数に丸められて 0.00019
になります。
注意点.2
文字列型を数値型に変換するロジックについて、ASTER では現状だと問題点もありますが簡単な解決法として文字列中に .
が含まれている場合 float 型でキャストしています。
“.019” 的書き方も問題なく変換できます。
ただし科学的表記法を用いた場合には問題があります。
1E-3 == 0.001
ですが ASTER ではこの数を浮動小数点数判定できません。
この数値は ASTER で戻り値 1
となります。
ただ実用上はおそらく問題が無く、CF25 が Double を扱えない方がよほど重大です。(責任転嫁)
注意点.3
CF25 で Double は文字列として送受信する以外方法がありません。エクステンション内部では float 型を計算でほぼ扱わず double 型で計算して計算結果だけを float 型に丸めています。