Decimal

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

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