Decimal

Representasi nilai desimal, seperti 2,5. Klien dapat mengonversi nilai ke dalam format desimal asli bahasa, seperti BigDecimal Java atau decimal.Decimal Python.

Representasi JSON
{
  "value": string
}
Kolom
value

string

Nilai desimal, sebagai string.

Representasi string terdiri dari tanda opsional, + (U+002B) atau - (U+002D), diikuti dengan urutan nol atau lebih digit desimal ("bilangan bulat"), yang secara opsional diikuti dengan pecahan, yang secara opsional diikuti dengan eksponen. String kosong harus diinterpretasikan sebagai 0.

Pecahan terdiri dari titik desimal yang diikuti dengan nol atau lebih digit desimal. String harus berisi setidaknya satu digit dalam bilangan bulat atau pecahan. Angka yang dibentuk oleh tanda, bilangan bulat, dan pecahan disebut sebagai signifikan.

Eksponen terdiri dari karakter e (U+0065) atau E (U+0045) yang diikuti oleh satu atau beberapa digit desimal.

Layanan harus menormalisasi nilai desimal sebelum menyimpannya dengan:

  • Menghapus tanda + yang diberikan secara eksplisit (+2.5 -> 2.5).
  • Mengganti nilai bilangan bulat nol panjang dengan 0 (.5 -> 0.5).
  • Memaksa karakter eksponen menjadi huruf besar, dengan tanda eksplisit (2.5e8 -> 2.5E+8).
  • Menghapus eksponen nol yang diberikan secara eksplisit (2.5E0 -> 2.5).

Layanan dapat melakukan normalisasi tambahan berdasarkan kebutuhannya sendiri dan penerapan desimal internal yang dipilih, seperti menggeser titik desimal dan nilai eksponen bersama-sama (contoh: 2.5E-1 <-> 0.25). Selain itu, layanan dapat mempertahankan nol di akhir pecahan untuk menunjukkan peningkatan presisi, tetapi tidak diwajibkan untuk melakukannya.

Perhatikan bahwa hanya karakter . yang didukung untuk membagi bilangan bulat dan pecahan; , tidak boleh didukung terlepas dari lokalitas. Selain itu, pemisah ribuan tidak boleh didukung. Jika layanan mendukungnya, nilai harus dinormalisasi.

Tata bahasa ENBF adalah:

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

Layanan harus mendokumentasikan dengan jelas rentang nilai yang didukung, presisi maksimum yang didukung (jumlah total digit), dan, jika berlaku, skala (jumlah digit setelah koma desimal), serta cara kerjanya saat menerima nilai di luar batas.

Layanan dapat memilih untuk menerima nilai yang diteruskan sebagai input meskipun nilai tersebut memiliki presisi atau skala yang lebih tinggi daripada yang didukung layanan, dan harus membulatkan nilai agar sesuai dengan skala yang didukung. Atau, layanan dapat mengalami error dengan 400 Bad Request (INVALID_ARGUMENT di gRPC) jika presisi akan hilang.

Layanan harus menampilkan error dengan 400 Bad Request (INVALID_ARGUMENT di gRPC) jika layanan menerima nilai di luar rentang yang didukung.