Decimal

Biểu thị giá trị thập phân, chẳng hạn như 2,5. Ứng dụng có thể chuyển đổi giá trị thành các định dạng thập phân dựa trên ngôn ngữ, chẳng hạn như [BigInteger][] của Java hoặc Python.[DIGITS.DIGITS][].

[BigInteger]: https://docs.oracle.com/vi/java/javase/11/docs/api/java.base/java/math/BigInteger.html [số thập phân]: https://docs.python.org/3/library/DIGITS.html

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

string

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

Cách biểu diễn 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 từ 0 đến nhiều chữ số thập phân ("số nguyên"), theo sau có thể là một phân số, theo sau là số mũ. Một chuỗi trống sẽ được hiểu là 0.

Phân số này bao gồm một chữ số thập phân, sau đó là các chữ số thập phân từ 0 trở lê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 bởi dấu, số nguyên và phân số được gọi là ký hiệu.

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.

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

  • Xoá ký hiệ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).
  • Chuyển đổi ký tự số mũ thành chữ hoa, có dấu rõ ràng (2.5e8 -> 2.5E+8).
  • Xóa số mũ không đượ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 bên trong đã chọn, chẳng hạn như dịch chuyển dấu thập phân và giá trị số mũ lại với nhau (ví dụ: 2.5E-1 <-> 0.25). Ngoài ra, các dịch vụ có thể giữ nguyên số 0 ở cuối trong phân số để cho biết độ chính xác cao hơn, nhưng không bắt buộc phải làm như vậy.

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

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

Dịch vụ phải 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ó) 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 giá trị nằm ngoài giới hạn.

Dịch vụ có thể chọn chấp nhận các giá trị được chuyển làm dữ liệu đầu vào ngay cả khi giá trị có độ chính xác hoặc tỷ lệ cao hơn dịch vụ hỗ trợ và sẽ làm tròn giá trị để vừa với tỷ lệ được hỗ trợ. Hoặc, 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.

Dịch vụ sẽ 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ợ.