2012-05-17 22 views
7

मेरी समस्या वास्तव में सरल है लेकिन मुझे यकीन नहीं है कि JSON.parse का उपयोग कर "मूल" समाधान है या नहीं।JSON.parse पार्स/बड़े नंबरों को गलत तरीके से परिवर्तित करता है

{ "key" : -922271061845347500 } 
:

{ "key" : -922271061845347495 } 

जब मैं इस स्ट्रिंग पर JSON.parse उपयोग कर रहा हूँ, यह इस वस्तु में बदल जाता है:

मैं एक एपीआई से इस स्ट्रिंग प्राप्त

जैसा कि आप देख सकते हैं, जब संख्या बहुत लंबी होती है तो पार्सिंग बंद हो जाती है (आप इस व्यवहार को देख सकते हैं here)। इसमें केवल 15 सटीक अंक हैं, आखिरी वाला गोल है और बाद में 0 पर सेट हैं। क्या सटीक मूल्य रखने के लिए कोई "मूल" समाधान है? (यह एक आईडी है इसलिए मैं इसे गोल नहीं कर सकता)

मुझे पता है कि मैं इस समस्या को हल करने के लिए रेगेक्स का उपयोग कर सकता हूं लेकिन यदि यह मौजूद है तो मैं "मूल" विधि का उपयोग करना पसंद करूंगा।

+1

क्या आप इसे एक स्ट्रिंग बना सकते हैं? –

+0

साथ, '{" कुंजी ":" -922271061845347495 "} का प्रयास करें' – Jashwant

+1

यह कई जवाब प्रदान करता है: [ढेर अतिप्रवाह धागा] [1] [1]: http://stackoverflow.com/ प्रश्न/20 9 86 9/क्या-स्वीकार्य-रास्ता-से-भेजने -64-बिट-मान-ओवर-जेसन –

उत्तर

15

आपकी धारणा है कि कुछ अंक गलत होने के बाद बंद हो जाता है।

यह here का कहना है:

जावास्क्रिप्ट में सभी नंबरों को कर रहे हैं फ्लोटिंग प्वाइंट संख्या। जावास्क्रिप्ट का उपयोग करता मानक 8 बाइट आईईईई फ्लोटिंग प्वाइंट सांख्यिक प्रारूप है, जो रेंज का मतलब से है:

± 1.7976931348623157 x 10 - बहुत बड़ी है, और ± 5 x 10 -324 - बहुत छोटा।

जावास्क्रिप्ट चल बिन्दु संख्या सटीकता केवल के बीच पूर्णांकों के लिए का आश्वासन दिया है का उपयोग करता है के रूप में: -9007199254740992 (-2) और 9007199254740992 (2)

आप संख्या के बाहर स्थित है "सटीक" रेंज इसलिए इसे जावास्क्रिप्ट नंबर के निकटतम प्रतिनिधित्व में परिवर्तित कर दिया गया है। इस नंबर का मूल्यांकन करने का कोई भी प्रयास (JSON.parse, eval, parseInt का उपयोग करके) डेटा हानि का कारण बन जाएगा। इसलिए मैं अनुशंसा करता हूं कि आप एक स्ट्रिंग के रूप में कुंजी पास करें। यदि आप एपीआई को नियंत्रित नहीं करते हैं, तो एक फीचर अनुरोध दर्ज करें।

+0

यह वास्तव में सवाल का जवाब नहीं देता है, हालांकि। "क्या सटीक मूल्य रखने के लिए कोई मूल समाधान है?" –

+0

मूल समाधान आपके स्वयं के JSON पार्सर को लिखना होगा जो संख्याओं को तारों के रूप में पार करता है। –

+0

@ सलमान ए: आपके स्पष्टीकरण और सलाह के लिए धन्यवाद।मैं शायद अपना खुद का पार्सर बनाने और स्ट्रिंग के रूप में चाबियाँ भेजने से पहले थोड़ा इंतजार करूँगा और फिर उन्हें एपीआई पक्ष पर नंबर पर पार्स कर दूंगा। – Simon

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

  • कोई संबंधित समस्या नहीं^_^