Decimal

การแสดงค่าทศนิยม เช่น 2.5 ไคลเอ็นต์อาจแปลงค่าเป็นรูปแบบทศนิยมดั้งเดิมของภาษา เช่น BigDecimal ของ Java หรือ decimal.Decimal ของ Python

การแสดง JSON
{
  "value": string
}
ช่อง
value

string

ค่าทศนิยมเป็นสตริง

การแสดงสตริงประกอบด้วยเครื่องหมายที่ไม่บังคับ + (U+002B) หรือ - (U+002D) ตามด้วยลำดับของตัวเลขฐานสิบตั้งแต่ 0 หลักขึ้นไป ("จำนวนเต็ม") ตามด้วยเศษส่วน (ไม่บังคับ) ตามด้วยเลขชี้กำลัง (ไม่บังคับ) สตริงว่างควรตีความว่าเป็น 0

เศษส่วนประกอบด้วยจุดทศนิยมตามด้วยตัวเลขทศนิยม 0 หลักขึ้นไป สตริงต้องมีตัวเลขอย่างน้อย 1 ตัวในจำนวนเต็มหรือเศษส่วน ตัวเลขที่เกิดจากเครื่องหมาย จำนวนเต็ม และเศษส่วนเรียกว่า Significand

เลขชี้กำลังประกอบด้วยอักขระ e (U+0065) หรือ E (U+0045) ตามด้วยตัวเลขทศนิยมอย่างน้อย 1 หลัก

บริการควรทําให้ค่าทศนิยมเป็นค่าปกติก่อนจัดเก็บโดยทําดังนี้

  • การนำเครื่องหมาย + ที่ระบุอย่างชัดเจนออก (+2.5 -> 2.5)
  • แทนที่ค่าจำนวนเต็มที่มีความยาวเป็น 0 ด้วย 0 (.5 -> 0.5)
  • บังคับให้อักขระเลขชี้กำลังเป็นตัวพิมพ์ใหญ่พร้อมเครื่องหมายที่ชัดเจน (2.5e8 -> 2.5E+8)
  • การนำเลขชี้กำลัง 0 ที่ระบุอย่างชัดเจนออก (2.5E0 -> 2.5)

บริการอาจทำการปรับค่าเพิ่มเติมตามความต้องการของตนเองและการใช้ทศนิยมภายในที่เลือก เช่น การเลื่อนจุดทศนิยมและค่าเลขชี้กำลังพร้อมกัน (ตัวอย่าง: 2.5E-1 <-> 0.25) นอกจากนี้ บริการอาจเก็บเลข 0 ต่อท้ายในเศษส่วนเพื่อระบุความแม่นยำที่เพิ่มขึ้น แต่ไม่จำเป็นต้องทำเช่นนั้น

โปรดทราบว่าระบบรองรับเฉพาะอักขระ . เพื่อแบ่งจำนวนเต็มและเศษส่วนเท่านั้น และ, ไม่ควรรองรับไม่ว่าจะเป็นภาษาใดก็ตาม นอกจากนี้ ไม่ควรรองรับตัวคั่นหลักพัน หากบริการรองรับค่าดังกล่าว ต้องทำให้ค่าเป็นปกติ

ไวยากรณ์ 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) หากได้รับค่าที่อยู่นอกช่วงที่รองรับ