2011-12-27 13 views
6

मेरे पास एक डब्ल्यूसीएफ सेवा संचालन है जो long और List<string> गुणों वाला ऑब्जेक्ट देता है। जब मैं डब्ल्यूसीएफ आवेदन में ऑपरेशन का परीक्षण करता हूं, तो सब कुछ ठीक काम करता है और मान सही होते हैं। हालांकि, मुझे jQuery और JSON प्रारूप का उपयोग करके सेवा को कॉल करने में सक्षम होना चाहिए। संपत्ति का मान स्पष्ट रूप से बदलता है जब मैं इसे OnSucceed फ़ंक्शन में वापस पढ़ता हूं।JSON.Stringify() बड़ी संख्या में संख्यात्मक मूल्य बदलता है?

खोज के बाद मुझे पता चला है कि JSON.stringify बड़े मानों को बदलता है। तो इस तरह कोड में:

alert(JSON.stringify(25001509088465005)); 

... यह मान 25001509088465004 के रूप में दिखाएगा।

क्या हो रहा है?

यहाँ डेमो: http://jsfiddle.net/naveen/tPKw7/

+0

कृपया अपना प्रश्न अधिक स्पष्ट करें। –

+0

बस ऊपर जावास्क्रिप्ट कोड का परीक्षण करें और देखें कि आपने क्या भेजा है और JSON.stringify क्या लौटा है। –

+2

जावास्क्रिप्ट संख्या प्रकार की सटीक सीमा के कारण। यह भी देखें: http://stackoverflow.com/questions/588004/is-javascripts-math-broken – mbarkhau

उत्तर

4

जावास्क्रिप्ट IEEE-754 डबल परिशुद्धता (64 बिट) प्रारूप का उपयोग कर संख्या प्रतिनिधित्व करता है। जैसा कि मैं समझता हूं यह आपको 53 बिट सटीक, या पंद्रह से सोलह दशमलव अंक देता है। जावास्क्रिप्ट की तुलना में आपके नंबर में अधिक अंक हैं, इसलिए आप अनुमान के साथ समाप्त हो जाते हैं।

क्या आपको इस बड़ी संख्या में गणित के संचालन करने की आवश्यकता है? क्योंकि अगर यह किसी प्रकार की आईडी है तो आप इसे एक स्ट्रिंग के रूप में वापस कर सकते हैं और समस्या से बच सकते हैं।

+0

हाँ, लेकिन मैं इसे लंबे समय तक रखना चाहता था लेकिन आखिरकार मैं इसे स्ट्रिंग के रूप में प्राप्त करता हूं और यह उसका अंत है। –

+0

जावास्क्रिप्ट में कोई "लंबा" डेटाटाइप नहीं है, केवल संख्या। –

+0

हां, मुझे स्पष्ट रूप से कहा जाना चाहिए था कि "जावास्क्रिप्ट _all_ संख्याओं का उपयोग कर रहा है ..." – nnnnnn

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