Decimal

Biểu thị một giá trị thập phân, chẳng hạn như 2,5. Các ứng dụng có thể chuyển đổi giá trị thành định dạng số thập phân gốc của ngôn ngữ, chẳng hạn như BigDecimal của Java hoặc decimal.Decimal của Python.

Biểu diễn dưới dạng JSON
{
  "value": string
}
Trường
value

string

Giá trị thập phân, dưới dạng chuỗi.

Biểu thị chuỗi bao gồm một dấu tuỳ chọn, + (U+002B) hoặc - (U+002D), theo sau là một chuỗi gồm 0 hoặc nhiều chữ số thập phân ("số nguyên"), theo sau là một phân số (không bắt buộc), theo sau là một số mũ (không bắt buộc). Chuỗi trống phải được diễn giải là 0.

Phần phân số bao gồm một dấu thập phân, theo sau là 0 hoặc nhiều chữ số thập phân. Chuỗi phải chứa ít nhất một chữ số trong số nguyên hoặc phân số. Số được tạo thành từ dấu, số nguyên và phân số được gọi là phần định trị.

Số mũ bao gồm ký tự e (U+0065) hoặc E (U+0045) theo sau là một hoặc nhiều chữ số thập phân.

Các dịch vụ nên chuẩn hoá các giá trị thập phân trước khi lưu trữ bằng cách:

  • Xoá dấu + được cung cấp rõ ràng (+2.5 -> 2.5).
  • Thay thế giá trị số nguyên có độ dài bằng 0 bằng 0 (.5 -> 0.5).
  • Ép buộc ký tự số mũ thành chữ hoa, có dấu rõ ràng (2.5e8 -> 2.5E+8).
  • Xoá số mũ 0 được cung cấp rõ ràng (2.5E0 -> 2.5).

Các dịch vụ có thể thực hiện việc chuẩn hoá bổ sung dựa trên nhu cầu riêng và cách triển khai số thập phân nội bộ đã chọn, chẳng hạn như cùng nhau chuyển dấu thập phân và giá trị số mũ (ví dụ: 2.5E-1 <-> 0.25). Ngoài ra, các dịch vụ có thể giữ lại các số 0 ở cuối phần phân số để cho biết độ chính xác tăng lên, nhưng không bắt buộc phải làm như vậy.

Xin lưu ý rằng chỉ ký tự . được hỗ trợ để phân chia số nguyên và phân số; , không được hỗ trợ bất kể ngôn ngữ. Ngoài ra, dấu phân cách hàng nghìn không được hỗ trợ. Nếu một dịch vụ hỗ trợ các giá trị này, thì bạn phải chuẩn hoá các giá trị.

Ngữ pháp ENBF là:

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

Các dịch vụ nên ghi lại rõ ràng phạm vi giá trị được hỗ trợ, độ chính xác tối đa được hỗ trợ (tổng số chữ số) và nếu có, thì cả tỷ lệ (số chữ số sau dấu thập phân), cũng như cách hoạt động khi nhận được các giá trị nằm ngoài phạm vi.

Các dịch vụ có thể chọn chấp nhận các giá trị được truyền dưới dạng đầu vào ngay cả khi giá trị có độ chính xác hoặc tỷ lệ cao hơn mức mà dịch vụ hỗ trợ và phải làm tròn giá trị để phù hợp với tỷ lệ được hỗ trợ. Ngoài ra, dịch vụ có thể gặp lỗi với 400 Bad Request (INVALID_ARGUMENT trong gRPC) nếu độ chính xác bị mất.

Các dịch vụ phải gặp lỗi với 400 Bad Request (INVALID_ARGUMENT trong gRPC) nếu dịch vụ nhận được một giá trị nằm ngoài phạm vi được hỗ trợ.