Decimal

Darstellung eines Dezimalwerts, z.B. 2,5 Clients können Werte in sprachnative Dezimalformate konvertieren, z. B. [BigDecimal][] von Java oder [decimal.Decimal][] von 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

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 Reihe von Null oder mehr Dezimalziffern („Ganzzahl“), optional gefolgt von einem Bruch, gefolgt von einem Exponenten. Ein leerer String sollte als 0 interpretiert werden.

Der Bruch besteht aus einem Dezimalpunkt gefolgt von null oder mehr Dezimalstellen. Der String muss mindestens eine Ziffer in der Ganzzahl oder im Bruch enthalten. Die durch das Vorzeichen gebildete Zahl, die Ganzzahl und der Bruch wird als Signifikanz bezeichnet.

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

Dienste sollten Dezimalwerte vor dem Speichern normalisieren:

  • Ein explizit angegebenes +-Zeichen entfernen (+2.5 -> 2.5).
  • Ersetzt einen ganzzahligen Wert der Länge null durch 0 (.5 -> 0.5).
  • Erzwingen des Exponentenzeichens in Großbuchstaben mit einem expliziten Zeichen (2.5e8 -> 2.5E+8)
  • Explizit angegebenen Nullexponenten entfernen (2.5E0 -> 2.5).

Dienste können eine zusätzliche Normalisierung basierend auf ihren eigenen Anforderungen und der internen dezimalen Implementierung ausführen, z. B. Dezimalpunkt und Exponentenwert zusammen verschieben (Beispiel: 2.5E-1 <-> 0.25). Außerdem können Dienste nachstehende Nullen im Bruchteil beibehalten, müssen dies jedoch nicht tun.

Es wird nur das .-Zeichen unterstützt, um die Ganzzahl und den Bruch zu dividieren. , sollte unabhängig von der Sprache nicht unterstützt werden. Außerdem sind Tausendertrennzeichen nicht zulässig. Wenn ein Dienst sie unterstützt, müssen 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 klaren Bereich der unterstützten Werte, die maximale unterstützte Genauigkeit (Gesamtzahl der Ziffern) und gegebenenfalls die Skala (Anzahl der Nachkommastellen) sowie das Verhalten beim Empfang außerhalb des gültigen Bereichs genau dokumentieren.

Dienste können Werte annehmen, die als Eingabe übergeben werden, auch wenn der Wert eine höhere Genauigkeit oder Skalierung hat, als der Dienst unterstützt, und diesen Wert auf die unterstützte Skala runden. Alternativ kann der Dienst mit 400 Bad Request (INVALID_ARGUMENT in gRPC) fehlschlagen, wenn die Genauigkeit verloren gehen würde.

Dienste sollten einen Fehler von 400 Bad Request (INVALID_ARGUMENT in gRPC) verursachen, wenn der Dienst einen Wert außerhalb des unterstützten Bereichs erhält.