Decimal

ייצוג של ערך עשרוני, למשל 2.5. לקוחות יכולים להמיר ערכים לפורמטים עשרוניים מבוססי-שפה, כגון [BigDecimal][] של Java או [decimal.Decimal][] של Python.

[BigQuery]

ייצוג 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) אם השירות מקבל ערך מחוץ לטווח הנתמך.