Decimal

Una representación de un valor decimal, como 2.5. Los clientes pueden convertir valores a formatos decimales nativos del lenguaje, como [BigDecimal][] de Java o [decimal.Decimal][] de Python.

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

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

string

El valor decimal, como una string.

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

La fracción es una coma decimal seguida de cero o más dígitos decimales. La string 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 número entero y la fracción se conocen como el significado.

El exponente consiste en el 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).
  • Reemplaza un valor de número entero de longitud cero por 0 (.5 -> 0.5).
  • Cómo convertir el carácter exponencial en 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 en función de sus propias necesidades y la implementación de números decimales internos seleccionados, como cambiar el punto decimal y el valor exponentes juntos (por ejemplo: 2.5E-1 <-> 0.25). Además, los servicios pueden conservar los ceros finales en la fracción para indicar una precisión mayor, pero no son un requisito.

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

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 con claridad el rango de valores admitidos, la precisión máxima admitida (cantidad total de dígitos) y, si corresponde, la escala (número de dígitos después del punto decimal), así como su comportamiento cuando recibe valores fuera de los límites.

Los servicios pueden aceptar valores pasados como entrada, incluso cuando el valor tiene una precisión o escala mayor que 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 la precisión.

Los servicios deben generar un error con 400 Bad Request (INVALID_ARGUMENT en gRPC) si el servicio recibe un valor fuera del rango admitido.