Decimal

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

Rappresentazione JSON
{
  "value": string
}
Campi
value

string

Il valore decimale, come stringa.

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

La frazione è costituita da un punto decimale seguito da zero o più cifre decimali. La stringa deve contenere almeno una cifra nella parte intera o frazionaria. Il numero formato dal segno, dall'intero e dalla frazione è detto significando.

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

I servizi devono normalizzare i valori decimali prima di memorizzarli:

  • Rimozione di un segno + fornito esplicitamente (+2.5 -> 2.5).
  • Sostituzione di un valore intero di lunghezza zero con 0 (.5 -> 0.5).
  • Forzando il carattere esponente in maiuscolo, con segno esplicito (2.5e8 -> 2.5E+8).
  • Rimozione di un esponente zero fornito esplicitamente (2.5E0 -> 2.5).

I servizi possono eseguire un'ulteriore normalizzazione in base alle proprie esigenze e all'implementazione decimale interna selezionata, ad esempio spostando insieme il punto decimale e il valore dell'esponente (esempio: 2.5E-1 <-> 0.25). Inoltre, i servizi possono conservare gli zeri finali nella frazione per indicare una maggiore precisione, ma non sono tenuti a farlo.

Tieni presente che per dividere il numero intero e la frazione è supportato solo il carattere .; , non deve essere supportato indipendentemente dalle impostazioni internazionali. Inoltre, i separatori delle migliaia non devono essere supportati. Se un servizio li supporta, 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), nonché il 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 scala superiore a quella supportata dal servizio e devono arrotondare il valore in modo che rientri nella scala supportata. In alternativa, il servizio potrebbe generare un errore con 400 Bad Request (INVALID_ARGUMENT in gRPC) se la precisione andrebbe persa.

I servizi devono generare un errore con 400 Bad Request (INVALID_ARGUMENT in gRPC) se ricevono un valore al di fuori dell'intervallo supportato.