Decimal

Eine Darstellung eines Dezimalwerts, z. B. 2,5. Clients können Werte in sprachnative Dezimalformate wie BigDecimal in Java oder decimal.Decimal in Python konvertieren.

JSON-Darstellung
{
  "value": string
}
Felder
value

string

Der Dezimalwert als String.

Die Stringdarstellung besteht aus einem optionalen Vorzeichen, + (U+002B) oder - (U+002D), gefolgt von einer Folge aus null oder mehr Dezimalziffern („die Ganzzahl“), optional gefolgt von einem Bruch und optional gefolgt von einem Exponenten. Ein leerer String sollte als 0 interpretiert werden.

Die Nachkommastelle besteht aus einem Dezimalkomma, gefolgt von null oder mehr Dezimalziffern. Der String muss mindestens eine Ziffer im Ganzzahl- oder Bruchteil enthalten. Die Zahl, die sich aus dem Vorzeichen, der Ganzzahl und dem Bruch ergibt, wird als Mantisse bezeichnet.

Der Exponent besteht aus dem Zeichen e (U+0065) oder E (U+0045), gefolgt von einer oder mehreren Dezimalziffern.

Dienste sollten Dezimalwerte vor dem Speichern normalisieren, indem sie:

  • Entfernen eines explizit angegebenen +-Zeichens (+2.5 –> 2.5).
  • Ersetzen eines Ganzzahlwerts der Länge null durch 0 (.5 –> 0.5).
  • Der Exponent wird in Großbuchstaben umgewandelt und das Vorzeichen wird explizit angegeben (2.5e8 -> 2.5E+8).
  • Entfernen eines explizit angegebenen Nullexponenten (2.5E0 –> 2.5).

Dienste können je nach Bedarf und der ausgewählten internen Dezimalimplementierung zusätzliche Normalisierungen vornehmen, z. B. das Verschieben des Dezimalkommas und des Exponentenwerts (Beispiel: 2.5E-1 <-> 0.25). Außerdem können Dienste nachgestellte Nullen im Bruch beibehalten, um eine höhere Genauigkeit anzugeben. Dies ist jedoch nicht erforderlich.

Beachten Sie, dass nur das Zeichen . zum Trennen von Ganzzahl und Bruch unterstützt wird. , sollte unabhängig vom Gebietsschema nicht unterstützt werden. Außerdem sollten keine Tausendertrennzeichen unterstützt werden. Wenn ein Dienst sie unterstützt, müssen die Werte normalisiert werden.

Die ENBF-Grammatik lautet:

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

Dienste sollten den Bereich der unterstützten Werte, die maximal unterstützte Genauigkeit (Gesamtzahl der Ziffern) und, falls zutreffend, die Skala (Anzahl der Ziffern nach dem Dezimalkomma) sowie das Verhalten bei Empfang von Werten außerhalb des zulässigen Bereichs klar dokumentieren.

Dienste können als Eingabe übergebene Werte akzeptieren, auch wenn der Wert eine höhere Genauigkeit oder Skalierung hat, als vom Dienst unterstützt wird. Sie sollten den Wert runden, um ihn an die unterstützte Skalierung anzupassen. Alternativ kann der Dienst mit 400 Bad Request (INVALID_ARGUMENT in gRPC) fehlschlagen, wenn die Genauigkeit verloren ginge.

Dienste sollten mit 400 Bad Request (INVALID_ARGUMENT in gRPC) einen Fehler zurückgeben, wenn der Dienst einen Wert außerhalb des unterstützten Bereichs empfängt.