Decimal

Ondalık değer gösterimi (ör.2, 5). İstemciler, değerleri Java'nın BigDecimal veya Python'ın decimal.Decimal gibi dile özgü ondalık biçimlere dönüştürebilir.

JSON gösterimi
{
  "value": string
}
Alanlar
value

string

Ondalık değer, dize olarak.

Dize gösterimi, isteğe bağlı bir işaret (+ (U+002B) veya - (U+002D)), ardından sıfır veya daha fazla ondalık basamak dizisi ("tam sayı"), isteğe bağlı olarak bir kesir ve isteğe bağlı olarak bir üs içerir. Boş bir dize 0 olarak yorumlanmalıdır.

Kesir, ondalık işareti ve ardından gelen sıfır veya daha fazla ondalık basamaktan oluşur. Dize, tam sayı veya kesir kısmında en az bir rakam içermelidir. İşaret, tam sayı ve kesir ile oluşturulan sayıya anlamlı kısım denir.

Üs, e (U+0065) veya E (U+0045) karakterinden ve ardından bir veya daha fazla ondalık basamaktan oluşur.

Hizmetler, ondalık değerleri depolamadan önce şu yöntemlerle normalleştirmelidir:

  • Açıkça belirtilen bir + işaretini kaldırma (+2.5 -> 2.5).
  • Sıfır uzunluklu bir tam sayı değerini 0 ile değiştirme (.5 -> 0.5).
  • Üs karakterini büyük harfe zorlama, açık işaretle (2.5e8 -> 2.5E+8).
  • Açıkça belirtilen sıfır üssü kaldırılır (2.5E0 -> 2.5).

Hizmetler, kendi ihtiyaçlarına ve seçilen dahili ondalık uygulamasına göre ek normalleştirme yapabilir. Örneğin, ondalık noktayı ve üs değerini birlikte kaydırabilir (örnek: 2.5E-1 <-> 0.25). Ayrıca, hizmetler artan hassasiyeti belirtmek için kesirdeki sondaki sıfırları koruyabilir ancak bunu yapması zorunlu değildir.

Tam sayı ve kesri ayırmak için yalnızca . karakterinin desteklendiğini unutmayın. Yerel ayardan bağımsız olarak , desteklenmemelidir. Ayrıca, binlik ayırıcılar desteklenmemelidir. Bir hizmet bu değerleri destekliyorsa değerler normalleştirilmelidir.

ENBF dil bilgisi:

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

Hizmetler, desteklenen değer aralığını, desteklenen maksimum hassasiyeti (toplam basamak sayısı) ve varsa ölçeği (ondalık işareti sonrası basamak sayısı) ve sınırların dışında değerler aldığında nasıl davrandığını açıkça belgelemelidir.

Hizmetler, değer hizmetin desteklediğinden daha yüksek bir hassasiyete veya ölçeğe sahip olsa bile giriş olarak iletilen değerleri kabul etmeyi tercih edebilir ve desteklenen ölçeğe uyacak şekilde değeri yuvarlamalıdır. Alternatif olarak, hassasiyet kaybolacaksa hizmet 400 Bad Request (gRPC'de INVALID_ARGUMENT) ile hata verebilir.

Hizmet, desteklenen aralığın dışında bir değer alırsa 400 Bad Request (gRPC'de INVALID_ARGUMENT) ile hata vermelidir.