Decimal

Una rappresentazione di un valore decimale, ad esempio 2,5. I client possono convertire i valori in formati decimali nativi del linguaggio, come [BigDecimal][] di Java o [decimal.Decimal][] di Python.

[BigDecimal]: https://docs.oracle.com/it/java/javase/11/docs/api/java.base/java/math/BigDecimal.html [decimal.Decimal]: https://docs.python.org/3/library/decimal.html

Rappresentazione JSON
{
  "value": string
}
Campi
value

string

Il valore decimale, come stringa.

La rappresentazione della stringa è composta da un segno facoltativo, + (U+002B) o - (U+002D), seguito da una sequenza di zero o più cifre decimali ("il numero intero"), seguito facoltativamente da una frazione, seguita facoltativamente da un esponente. Una stringa vuota deve essere interpretata come 0.

La frazione è composta da un punto decimale seguito da zero o più cifre decimali. La stringa deve contenere almeno una cifra nel numero intero o nella frazione. Il numero formato dal segno, il numero intero e la frazione sono indicati come significato.

L'esponente è costituito dal carattere e (U+0065) o da E (U+0045) seguito da una o più cifre decimali.

I servizi devono normalizzare i valori decimali prima di archiviarli tramite:

  • Rimozione di un segno di + fornito in modo esplicito (+2.5 -> 2.5).
  • Sostituisci un valore intero di zero zero con 0 (.5 -> 0.5).
  • Forza il carattere dell'esponente a utilizzare la maiuscola, con il segno esplicito (2.5e8 -> 2.5E+8).
  • Rimozione di un esponente zero fornito esplicitamente (2.5E0 -> 2.5).

I servizi possono eseguire una normalizzazione aggiuntiva in base alle proprie esigenze e all'implementazione interna decimale selezionata, ad esempio spostare insieme la virgola e il valore dell'esponente (ad esempio: 2.5E-1 <-> 0.25). Inoltre, i servizi possono preservare gli zeri finali nella frazione per indicare una maggiore precisione, ma non sono obbligatori.

Tieni presente che è supportato solo il carattere . per dividere il numero intero e la frazione; , non deve essere supportato indipendentemente dalle impostazioni internazionali. Inoltre, i separatori delle migliaia non devono essere supportati. Se supportati da un servizio, i valori devono essere normalizzati.

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

I servizi devono documentare chiaramente l'intervallo di valori supportati, la precisione massima supportata (numero totale di cifre) e, se applicabile, la scala (numero di cifre dopo la virgola decimale), nonché il loro comportamento quando ricevono valori fuori dai limiti.

I servizi possono scegliere di accettare i valori passati come input anche quando il valore ha una precisione o una scalabilità superiori rispetto a quelli supportati dal servizio e dovrebbe arrotondarlo per adattarsi alla scala supportata. In alternativa, il servizio potrebbe causare un errore con 400 Bad Request (INVALID_ARGUMENT in gRPC) in caso di perdita di precisione.

I servizi dovrebbero errore con 400 Bad Request (INVALID_ARGUMENT in gRPC) se il servizio riceve un valore che non rientra nell'intervallo supportato.