Decimal

以小數表示的表示法,例如 2.5。用戶端可以將值轉換為語言原生的小數格式,例如 Java 的 [BigDecimal][] 或 Python 的 [decimal.Decimal][]。

[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

十進位值,以字串表示。

字串表示由選用符號 + (U+002B) 或 - (U+002D) 組成,後面接著一串零或更多小數位數 (即「整數」),後面加上分數,後面可加上指數。空白字串解譯為 0

分數由小數點組成,後面接著零或更多小數位數。字串中必須含有至少一個整數或分數值。由符號、整數和分數構成的數值稱為重要符號。

指數由 e (U+0065) 或 E (U+0045) 字元組成,後面接著一或多個小數。

服務「應該」將小數值標準化:

  • 移除明確提供的 + 符號 (+2.5 -> 2.5)。
  • 將零長度整數值替換為 0 (.5 -> 0.5)。
  • 將指數字元強制轉換為大寫,含明確的符號 (2.5e8 -> 2.5E+8)。
  • 移除明確提供的零指數 (2.5E0 -> 2.5)。

服務可能會根據自己的需求和內部小數實作執行額外的正規化處理,例如同時移動小數點和指數值 (例如:2.5E-1 <-> 0.25)。此外,服務「可能」會保留分數的結尾零,表示精確度更高,但並非必要。

請注意,系統僅支援 . 字元來分隔整數和分數;無論地區設定為何,系統都不應支援 ,。此外,系統不應支援數千個分隔符。如果服務可支援,則必須將值正規化。

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)。