Decimal

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

]

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

string

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

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

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

เลขยกกําลังประกอบด้วยอักขระ 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) หากบริการได้รับค่าที่อยู่นอกช่วงที่รองรับ