Decimal

Представление десятичного значения, например 2,5. Клиенты могут преобразовывать значения в собственные десятичные форматы языка, такие как [BigDecimal][] в Java или [decimal.Decimal][] в 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
{
  "value": string
}
Поля
value

string

Десятичное значение в виде строки.

Строковое представление состоит из необязательного знака + ( U+002B ) или - ( U+002D ), за которым следует последовательность из нуля или более десятичных цифр («целое число»), за которой может следовать дробь, за которой может следовать символ экспонента. Пустая строка должна интерпретироваться как 0 .

Дробь состоит из десятичной точки, за которой следует ноль или более десятичных цифр. Строка должна содержать хотя бы одну цифру целого числа или дроби. Число, образованное знаком, целым числом и дробью, называется мантиссом.

Показатель степени состоит из символа e ( U+0065 ) или E ( U+0045 ), за которым следует одна или несколько десятичных цифр.

Службы должны нормализовать десятичные значения перед их сохранением:

  • Удаление явно заданного знака + ( +2.5 -> 2.5 ).
  • Замена целочисленного значения нулевой длины на 0 ( .5 -> 0.5 ).
  • Приведение символа экспоненты к верхнему регистру с явным знаком ( 2.5e8 -> 2.5E+8 ).
  • Удаление явно заданного нулевого показателя ( 2.5E0 -> 2.5 ).

Службы могут выполнять дополнительную нормализацию в зависимости от собственных потребностей и выбранной внутренней десятичной реализации, например, сдвиг десятичной точки и значения экспоненты вместе (пример: 2.5E-1 <-> 0.25 ). Кроме того, службы могут сохранять нули в конце дроби, чтобы указать на повышенную точность, но это не обязательно.

Обратите внимание, что только . символ поддерживается для деления целого числа и дроби; , не должны поддерживаться независимо от языкового стандарта. Кроме того, разделители тысяч не должны поддерживаться. Если сервис их поддерживает, значения должны быть нормализованы.

Грамматика 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' };

Сервисы должны четко документировать диапазон поддерживаемых значений, максимальную поддерживаемую точность (общее количество цифр) и, если применимо, масштаб (количество цифр после запятой), а также то, как он ведет себя при получении нестандартных значений. ограничивает значения.

Службы могут принимать значения, переданные в качестве входных данных, даже если значение имеет более высокую точность или масштаб, чем поддерживает служба, и должны округлять значение, чтобы оно соответствовало поддерживаемому масштабу. Кроме того, служба может выдать ошибку 400 Bad Request ( INVALID_ARGUMENT в gRPC), если точность будет потеряна.

Службы должны выдавать ошибку 400 Bad Request ( INVALID_ARGUMENT в gRPC), если служба получает значение за пределами поддерживаемого диапазона.