2011-11-02 10 views
8

मैंने एक ऐसी प्रणाली स्थापित की है जो JSON में एक कॉम्पैक्ट डेटा स्ट्रिंग को पार करती है। मैं आईडी स्टोर करने के लिए 1 9 अंक संख्या का उपयोग कर रहा हूं। दुर्भाग्यवश 17 अंकों से अधिक संख्या, parseFloat() पिछले कुछ अंकों के दौर में है।पार्स फ्लोट में एक गोल सीमा है? मैं इसे कैसे ठीक करूं?

यह पूरे डेटा स्ट्रिंग को तोड़ देता है। क्या मैं इसे ठीक कर सकता हूं?

उदाहरण के लिए 82462955220852752158246295522085276000 में बदल गया है। ऐसा क्यों है?

जावास्क्रिप्ट में

http://jsfiddle.net/RobertWHurst/mhZ7Q/

+0

आपके पास उसके पास कई वस्तुएं नहीं हैं, है ना? फिर '1' से शुरू होने वाली नियमित वृद्धि आईडी का उपयोग करें। यदि आप आईडी को बदलकर अन्य वस्तुओं को पुनर्प्राप्त करने में सक्षम होने से रोकना चाहते हैं, तो कुछ यादृच्छिक मान वाले अतिरिक्त तर्क जोड़ें - फिर भी आप एक उचित आईडी (प्राथमिक डेटाबेस के रूप में अपने डेटाबेस में भी) का उपयोग कर सकते हैं और जब कोई उपयोगकर्ता प्रयास करता है यूआरएल को संशोधित करने के लिए वह किस्मत से बाहर है क्योंकि वह अन्य वस्तुओं की यादृच्छिक स्ट्रिंग नहीं जानता है। – ThiefMaster

+1

यदि यह एक आईडी है तो इसे एक संख्या के रूप में क्यों परेशान करते हैं? बस इसे एक स्ट्रिंग के रूप में रखें –

उत्तर

12

जावास्क्रिप्ट में केवल एक संख्यात्मक प्रकार है, जो एक आईईईई 754 डबल परिशुद्धता floating-point है। इसका मतलब है, आपके पास अधिकतम 52 बिट सटीक हैं, जो 15 दशमलव स्थानों से थोड़ा अधिक है।

यदि आपको इससे अधिक सटीकता की आवश्यकता है, तो आपको एक बिग्नम लाइब्रेरी या तारों के साथ काम करना होगा।

3

नंबर परिशुद्धता खो देते हैं तो वे एक निश्चित मूल्य से अधिक कर रहे हैं।

http://www.hunlock.com/blogs/The_Complete_Javascript_Number_Reference के अनुसार, पूर्णांक केवल 15 अंकों तक विश्वसनीय हैं (9 * 10^15 सटीक होने के लिए)।

1

इन 1. में से एक का प्रयास करें एक स्ट्रिंग दो में 2. स्प्लिट अपना नंबर और एक सरणी 3. bignum पुस्तकालय 4. एक छोटी संख्या का उपयोग करने के लिए छोटे-छोटे भागों को बचाने यदि आप कर सकते हैं

संबंधित मुद्दे