Decimal

Es una representación de un valor decimal, como 2.5. Los clientes pueden convertir valores en formatos decimales nativos del lenguaje, como BigDecimal de Java o decimal.Decimal de Python.

Representación JSON
{
  "value": string
}
Campos
value

string

Valor decimal, como una cadena.

La representación de cadena consta de un signo opcional, + (U+002B) o - (U+002D), seguido de una secuencia de cero o más dígitos decimales ("el número entero"), seguido opcionalmente de una fracción y, luego, de un exponente. Una cadena vacía debe interpretarse como 0.

La fracción consta de un punto decimal seguido de cero o más dígitos decimales. La cadena debe contener al menos un dígito en el número entero o en la fracción. El número formado por el signo, el entero y la fracción se conoce como significando.

El exponente consta del carácter e (U+0065) o E (U+0045) seguido de uno o más dígitos decimales.

Los servicios deben normalizar los valores decimales antes de almacenarlos de la siguiente manera:

  • Se quita un signo + proporcionado de forma explícita (+2.5 -> 2.5).
  • Reemplazar un valor entero de longitud cero por 0 (.5 -> 0.5)
  • Se fuerza el carácter del exponente a mayúsculas, con signo explícito (2.5e8 -> 2.5E+8).
  • Se quita un exponente cero proporcionado de forma explícita (2.5E0 -> 2.5).

Los servicios pueden realizar una normalización adicional según sus propias necesidades y la implementación decimal interna seleccionada, como desplazar el punto decimal y el valor del exponente juntos (por ejemplo, 2.5E-1 <-> 0.25). Además, los servicios pueden conservar los ceros finales en la fracción para indicar una mayor precisión, pero no están obligados a hacerlo.

Ten en cuenta que solo se admite el carácter . para dividir el número entero y la fracción; , no debería admitirse independientemente de la configuración regional. Además, no se deben admitir separadores de miles. Si un servicio los admite, los valores deben normalizarse.

La gramática de la ENBF es la siguiente:

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

Los servicios deben documentar claramente el rango de valores admitidos, la precisión máxima admitida (cantidad total de dígitos) y, si corresponde, la escala (cantidad de dígitos después del punto decimal), así como su comportamiento cuando reciben valores fuera de los límites.

Los servicios pueden optar por aceptar valores que se pasan como entrada, incluso cuando el valor tiene una precisión o escala más alta de la que admite el servicio, y deben redondear el valor para que se ajuste a la escala admitida. Como alternativa, el servicio puede generar un error con 400 Bad Request (INVALID_ARGUMENT en gRPC) si se pierde precisión.

Los servicios deben mostrar un error con 400 Bad Request (INVALID_ARGUMENT en gRPC) si reciben un valor fuera del rango admitido.