Decimal

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

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 suivi d'une fraction, éventuellement suivi d'un exposant. Une chaîne vide doit être interprétée comme 0.

La fraction se compose d'une virgule décimale suivie de zéro ou plusieurs chiffres décimaux. La chaîne doit contenir au moins un chiffre dans la partie entière ou la partie fractionnaire. Le nombre formé par le signe, l'entier et la fraction est appelé "significande".

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

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

  • Suppression d'un signe + fourni explicitement (+2.5 > 2.5).
  • Remplacement d'une valeur entière de longueur nulle par 0 (.5 -> 0.5).
  • Forcer le caractère d'exposant en majuscule, 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écalant le point décimal et la valeur de l'exposant ensemble (exemple : 2.5E-1 <-> 0.25). De plus, les services peuvent conserver les zéros de fin de la fraction pour indiquer une précision accrue, mais ils n'y sont pas tenus.

Notez que seul le caractère . est accepté pour séparer l'entier et la fraction. N'utilisez pas le caractère ,, quel que soit le paramètre régional. De plus, les séparateurs des milliers ne doivent 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 doivent clairement documenter la plage des 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 lorsqu'ils reçoivent des valeurs hors limites.

Les services peuvent choisir d'accepter les valeurs transmises en entrée, même si elles ont une précision ou une échelle supérieures à celles acceptées par le service, et doivent arrondir la valeur pour qu'elle corresponde à l'échelle acceptée. Le service peut également générer une erreur avec 400 Bad Request (INVALID_ARGUMENT dans gRPC) si la précision est perdue.

Les services doivent générer une erreur 400 Bad Request (INVALID_ARGUMENT dans gRPC) s'ils reçoivent une valeur en dehors de la plage acceptée.