Decimal

Représentation d'une valeur décimale, telle que 2,5. Les clients peuvent convertir des valeurs dans des formats décimaux natifs, tels que [BigDecimal][] de Java ou [decimal.Decimal][] de Python.

[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

Représentation JSON
{
  "value": string
}
Champs
value

string

Valeur décimale sous forme de chaîne.

La représentation sous forme de chaîne se compose d'un signe facultatif, + (U+002B) ou - (U+002D), suivi d'une séquence de zéro ou plusieurs chiffres décimaux ("l'entier"), éventuellement suivis d'une fraction, éventuellement suivie d'un exposant. Une chaîne vide devrait être interprétée comme 0.

La fraction comprend un point décimal suivi de zéro ou plusieurs chiffres décimaux. La chaîne doit contenir au moins un chiffre dans l'entier ou la fraction. Le nombre formé par le signe, l'entier et la fraction sont appelés "significandes".

L'exposant est composé du caractère e (U+0065) ou E (U+0045), suivi d'un ou plusieurs chiffres décimaux.

Les services devraient normaliser les valeurs décimales avant de les stocker en:

  • Supprimer un signe + fourni explicitement (+2.5 -> 2.5)
  • Remplacement d'un nombre entier de longueur nulle par 0 (.5 -> 0.5).
  • Forcer le caractère d'exposant avec des majuscules, avec un signe explicite (2.5e8 -> 2.5E+8).
  • Suppression d'un exposant zéro fourni explicitement (2.5E0 -> 2.5)

Les services peuvent effectuer une normalisation supplémentaire en fonction de leurs propres besoins et de l'implémentation décimale interne sélectionnée, par exemple en déplaçant le point décimal et la valeur d'exposant ensemble (par exemple, 2.5E-1 <-> 0.25). De plus, les services peuvent conserver les zéros de fin dans la fraction pour indiquer une précision accrue, mais ne sont pas obligatoires.

Notez que seul le caractère . permet de diviser l'entier et la fraction. , ne doit pas être accepté, quels que soient les paramètres régionaux. En outre, des milliers de séparateurs ne devraient pas être acceptés. Si un service les accepte, les valeurs doivent être normalisées.

La grammaire ENBF est la suivante:

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' };

Les services devraient documenter clairement la plage de valeurs acceptées, la précision maximale acceptée (nombre total de chiffres) et, le cas échéant, l'échelle (nombre de chiffres après la virgule), ainsi que leur comportement en cas de réception de valeurs hors limites.

Les services peuvent accepter les valeurs transmises en entrée même si leur valeur ou leur échelle sont supérieures à celles acceptées par le service, et devraient arrondir la valeur pour correspondre à l'échelle acceptée. Sinon, le service peut rencontrer une erreur avec 400 Bad Request (INVALID_ARGUMENT dans gRPC) en cas de perte de précision.

Les services devraient générer une erreur avec 400 Bad Request (INVALID_ARGUMENT dans gRPC) si le service reçoit une valeur en dehors de la plage acceptée.