Targeted JSON Pointer: Retrieve the Data as a Numeric Type
using Targeted JSON Pointer..
ASTER::EXPRESSION::JSON::Targeted JSON Pointer: Get as a value of numeric
事前にターゲット指定されたパスにある JSON 配列から、指定した配列要素のデータを「数値型」で取得。
- 関連 URL : Set the Targeted JSON Pointer
Boolean 型を数値型にキャストした値として取得できます。
{
"example":
[
true,
false
]
}| 真偽値 | 数値へ変換後の値 |
|---|---|
true |
1 |
false |
0 |
文字列型として登録されているデータも可能な限り数値として取得します。
数値型は JSON の仕様だと整数 ( int )、浮動小数点数 ( double ) ですが、ASTER と CF25 で相互に値を送信する場合、CF25 の仕様に合わせて浮動小数点数型は float までのサポートになります。
float 型は整数部と小数点数部を合計して 7 桁までの数値を表現可能です。実用上の問題は無い精度ですが、表現可能な範囲は double 型と比較するとかなり狭くなります。
signed int 型の上限は ±2,147,483,647 を確認してあります。
Parameter
以下 JSON データがメモリ上に展開されているという前提で、配列要素を指定
{
"numeric":
[
[
-100,
"2147483647",
19.0E-2,
19.0E-5,
19.0E-6,
true
]
]
}"/numeric/0"0ExNumAsTgtArIdx( "ASTER", 0 )| argument | result | Details |
|---|---|---|
0 |
-100 |
"/numeric/0/0" から値取得 |
1 |
2147483647 |
signed int 型の上限、文字列を数値化 |
2 |
0.19 |
科学的表記法 ( 19.0 × 10⁻² ) |
3 |
0.00019 |
科学的表記法 ( 19.0 × 10⁻⁵ ) |
4 |
1.9e-05 |
丸め誤差: 0.000019 が内部的に丸められた値 |
5 |
1 |
Boolean は型変換される |
19.0E-6 が 1.9e-05 になる
CF25 の Expression Editor にも共通する仕様。表現可能な最も近い値に丸められる。
0.000019( または 19.0E-6 )は、C 言語の float型 の範囲内に収まりますが、CF25 では 19.0E-6 は内部的に丸められ、有効数字範囲で最も近い表現可能な値 1.9e-05 になります。
Notes.1
科学的表記法と丸め誤差について
E-5 は科学的表記法、E^-5 という意味です。19.0 * 10 ^ -5 はコンピュータ上で以下のように計算されます。
float a = 19.0;
float b = 0.00001; // 10 ^ -5
double c = a * b; // 0.00018999999999999998
十進数の小数部分( 例:0.00001 )は二進数では無限に続く小数となり、限られたビット数で近似的に表現されます。この近似は計算時に微小な誤差が発生し、
19.0 × 10⁻⁵の計算結果は期待された厳密な値0.00019ではなく0.00018999999999999998になります。
double 型( 倍精度 )の値は浮動小数点数 ( 単精度浮動小数点数 ) に丸められて 0.00019 になります。
Notes.2
文字列型を数値型に変換する際のロジックについて
簡単な解決法として ASTER では文字列中に . が含まれている場合 float 型でキャストします。
「小数表記」( Decimal Notation ): ".019" という書き方に対応できます。
ただしこの方法だと科学的表記法を用いた場合に問題があり、1E-3 == 0.001 ですが ASTER では文字列化された "1E-3" を浮動小数点数と判定できません。
"1E-3"は ASTER では1に変換されます。
Notes.3
CF25 の仕様
Double は文字列化して送受信する以外に確実な方法がありません。エクステンション内部では通常 double 型で数値を扱い、計算結果だけを float 型に丸めて CF25 へ返しています。
