Decimal

십진수 값 표현(예: 2.5) 클라이언트는 값을 자바의 [BigDecimal][] 또는 Python의 [decimal.Decimal][]과 같은 언어 기반 10진수 형식으로 변환할 수 있습니다.

[BigDecimal]: https://docs.oracle.com/ko/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

10진수 값입니다(문자열).

문자열 표현은 선택사항인 기호(+(U+002B) 또는 -(U+002D))로 구성되며, 0개 이상의 십진수 자릿수('정수')가 오고, 원하는 경우 분수 다음에 지수가 이어집니다. 빈 문자열은 0로 해석해야 합니다.

비율은 소수점 이하 자릿수로 구성됩니다. 문자열에는 정수 또는 분수에 있는 숫자가 한 개 이상 포함되어야 합니다. 부호로 표현되는 숫자, 정수 및 분수를 유의값이라고 합니다.

지수는 문자 e (U+0065) 또는 E (U+0045)와 하나 이상의 십진수로 구성됩니다.

서비스는 10진수 값을 저장하기 전에 정규화해야 합니다.

  • 명시적으로 제공된 + 기호 (+2.5 -> 2.5)를 삭제합니다.
  • 길이가 0인 정수 값을 0(.5 -> 0.5)로 바꿉니다.
  • 명시적인 기호(2.5e8 -> 2.5E+8)를 사용하여 지수 문자를 대문자로 강제 변환합니다.
  • 명시적으로 제공된 0 지수 (2.5E0 -> 2.5)를 삭제합니다.

서비스는 자체 니즈와 선택된 내부 십진수 구현(예: 소수점과 지수 값 이동)을 기반으로 추가 정규화를 할 수 있습니다(예: 2.5E-1 <-> 0.25). 또한 서비스는 정밀도를 높이기 위해 분수에서 후행 0을 보일 수 있지만 필수는 아닙니다.

. 문자만 정수와 분수를 분할하는 데 지원됩니다. ,는 언어와 관계없이 지원되지 않아야 합니다. 또한 천 단위 구분자는 지원되지 않아야 합니다. 서비스에서 이를 지원하는 경우 값을 정규화해야 합니다.

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 (gRPC에서 INVALID_ARGUMENT)와 함께 오류를 발생할 수 있습니다.

지원되는 범위 이외의 값을 수신하는 경우 400 Bad Request (gRPC에서는 INVALID_ARGUMENT)와 함께 오류가 발생해야 합니다.