Decimal

تمثيل لقيمة عشرية، مثل 2.5 قد تحول البرامج قيمًا إلى تنسيقات عشرية باللغة الأصلية، مثل [BigDecimal][] في جافا أو [decimal.Decimal][] في Python.

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

القيمة العشرية كسلسلة.

يتكون تمثيل السلسلة من علامة اختيارية، + (U+002B) أو - (U+002D)، يتبعها تسلسل من الصفر أو أكثر من الأرقام العشرية ("عدد صحيح")، ويتبعه اختياريًا كسر، يليه اختياريًا الأس. يجب تفسير السلسلة الفارغة على أنها 0.

يتكون الكسر من علامة عشرية متبوعة بصفر أو أكثر من الأرقام العشرية. يجب أن تحتوي السلسلة على رقم واحد على الأقل في العدد الصحيح أو الكسر. يُشار إلى العدد الذي يتم تشكيله من خلال العلامة، العدد الصحيح والكسر بالدلالة.

يتكون الأس من الحرف e (U+0065) أو E (U+0045) متبوعًا برقم عشري أو أكثر.

يجب أن تضبط الخدمات القيم العشرية قبل تخزينها عن طريق:

  • إزالة علامة + مقدمة صراحةً (+2.5 -> 2.5).
  • استبدال قيمة عدد صحيح صفري بـ 0 (.5 -> 0.5).
  • فرض الحرف الأسي على الأحرف الكبيرة، مع علامة صريحة (2.5e8 -> 2.5E+8).
  • إزالة أُس يساوي صفرًا تم توفيره صراحةً (2.5E0 -> 2.5).

قد تجري الخدمات تسوية إضافية استنادًا إلى احتياجاتها الخاصة والتنفيذ العشري الداخلي المحدّد، مثل نقل العلامة العشرية وقيمة الأس معًا (مثال: 2.5E-1 <-> 0.25). بالإضافة إلى ذلك، قد تُبقي الخدمات أصفارًا لاحقة في الكسر للإشارة إلى زيادة الدقة، ولكنها غير مطلوبة لإجراء ذلك.

يُرجى العِلم أنّه لا يُسمح باستخدام الحرف . إلا لتقسيم العدد الصحيح والكسر، أي أنّ , يجب ألا يكون متاحًا بغض النظر عن اللغة. بالإضافة إلى ذلك، يجب ألا يتم استخدام الآلاف من الفواصل. إذا كانت الخدمة تتيح استخدام هذه القيم، يجب ضبطها.

قواعد 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 (INVALID_ARGUMENT في gRPC) في حال فقدان الدقة.

يجب أن يحدث خطأ في الخدمات مع 400 Bad Request (INVALID_ARGUMENT في gRPC) إذا كانت الخدمة تتلقى قيمة خارج النطاق المتوافق.