Decimal

10 進数値の表示(2.5 など)。クライアントは、Java の [BigDecimal][] や Python の [decimal.Decimal][] など、言語ネイティブの 10 進数形式に変換できます。

[BigDecimal]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/BigDecimal.html[decimal.Decimal]: https://docs.python.org/3/library/decimal.html

JSON 表現
{
  "value": string
}
フィールド
value

string

10 進数値(文字列)。

文字列表現は、オプションの記号、+U+002B)または -U+002D)、その後に 0 個以上の 10 進数字(「整数」)のシーケンス、必要に応じて小数点、必要に応じて指数で構成されます。空の文字列は 0 として解釈する必要があります

分数は、小数点の後に 0 個以上の小数点が続きます。文字列には、整数または分数のいずれかで 1 桁以上の数字を含める必要があります。符号と整数、分数で形成される数値を有意数と呼びます。

指数は、文字 eU+0065)または EU+0045)の後に 1 つ以上の小数点が続いています。

サービスで小数点以下の値を格納する前に、次の方法で正規化する必要があります

  • 明示的に提供された + 記号を削除します(+2.5 -> 2.5)。
  • 長さがゼロの整数値を 0.5 -> 0.5)に置き換えます。
  • 指数文字を大文字にして、明示的に符号を付けます(2.5e8 -> 2.5E+8)。
  • 明示的に指定したゼロ指数を削除します(2.5E0 -> 2.5)。

サービスでは、独自の小数点と小数点以下の数字の実装(例: 2.5E-1 <-> 0.25)の変更など、独自のニーズと内部の小数点以下の桁数に基づいて、追加の正規化を行うことができます。たとえば、小数点以下を 0 にすると、適合率を上げることができますが、必須ではありません。

整数と割合を分割できるのは . 文字のみです。言語に関係なく、,指定しないでください。また、千桁の区切りはサポートされていません。これらのサービスでサポートされている場合、値を正規化する必要があります。

ENBF 文法は次のとおりです。

DecimalString =
  '' | [Sign] Significand [Exponent];

Sign = '+' | '-';

Significand =
  Digits ['.'] [Digits] | [Digits] '.' Digits;

Exponent = ('e' | 'E') [Sign] Digits;

Digits = { '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' };

サービスは、サポートされている値の範囲、最大サポートされる精度(合計桁数)、スケール(小数点以下の桁数)と、範囲外の値を受け取った場合の動作を明記する必要があります。

サービスが適合する場合や、サービスがサポートする値より高い精度またはスケールを持つ場合であっても、サービスは、入力として渡された値を受け入れることが可能であり、サポートされているスケールに合わせるために値を丸める必要があります。または、精度が失われた場合に 400 Bad Request (gRPC の INVALID_ARGUMENT)とともにエラーが発生することがあります。

サポート対象の範囲外の値を受け取った場合、サービスは 400 Bad Request とエラーになります(gRPC の INVALID_ARGUMENT)。