Decimal

दशमलव वैल्यू, जैसे कि 2.5. क्लाइंट, वैल्यू को भाषा के हिसाब से दशमलव फ़ॉर्मैट में बदल सकते हैं. जैसे, Java का BigDecimal या Python का decimal.Decimal.

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 (gRPC में INVALID_ARGUMENT) के साथ गड़बड़ी कर सकती है.

अगर सेवा को, तय सीमा से बाहर की वैल्यू मिलती है, तो सेवाओं में 400 Bad Request (gRPC में INVALID_ARGUMENT) वाली गड़बड़ी होनी चाहिए.