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 型に丸めています。