मेरे पास पोस्टग्रेस बैकएंड के साथ एक रेल 5.2 एप्लिकेशन है। जब मैं डेटाबेस से टाइमस्टैम्प खींचता हूं और इसे एक फ्लोट (to_f) में परिवर्तित करता हूं, तो इसे सेकंड में माइक्रोसेकंड के साथ आंशिक सेकंड के साथ समय वापस करना चाहिए (क्योंकि सबसे बड़ी सटीक पोस्टग्रेज स्टोर माइक्रोसेकंड है)। इसके बजाय, मेरे द्वारा देखे जाने वाले टाइमस्टैम्प के लगभग 25% के लिए, टाइमस्टैम्प को फ़्लोट में परिवर्तित करते समय मुझे 7 दशमलव अंक (सैकड़ों नैनोसेकंड) मिलते हैं।

irb(main):009:0> u.created_at.to_f
=> 1440127129.5120609

यहाँ क्या चल रहा है? क्या यह 1440127129.512060 या 1440127129.512061 नहीं होना चाहिए? यह अतिरिक्त दशमलव अंक कहाँ से आ रहा है?

0
jhnatr 21 फरवरी 2019, 00:39

1 उत्तर

सबसे बढ़िया उत्तर

क्योंकि रूबी का inspect जैसा कि आप देखते हैं, दशमलव रूप में मान को प्रिंट करता है, आंतरिक रूप से संग्रहीत रूप से परिवर्तित होता है, जो एक बाइनरी है, और इसके प्रतिनिधित्व का इसकी आंतरिक सटीकता से कोई लेना-देना नहीं है और इसका इससे कोई लेना-देना नहीं है। रूबी ऑब्जेक्ट इंस्टेंस में आयात करने से पहले डेटाबेस में संग्रहीत मूल्य की सटीकता।

बिंदु का (एक भाग) प्रदर्शित करने के लिए, irb या रेल कंसोल में f=0.1000; p f आज़माएं। यह सिर्फ "0.1" प्रिंट करता है और "0.1000" नहीं प्रिंट करता है।

1
Masa Sakano 21 फरवरी 2019, 02:22