यह कोई प्रश्न नहीं है क्योंकि यह अधिक जागरूक है। मैंने एक एप्लीकेशन अपडेट किया जो json_encode()
का उपयोग PHP7.1.1 में करता है और मुझे कभी-कभी 17 अंकों का विस्तार करने के लिए फ्लोट्स बदलने के साथ कोई समस्या दिखाई दे रही थी। दस्तावेज़ीकरण के अनुसार, PHP 7.1.x ने डबल मानों को एन्कोड करते समय सटीकता के बजाय serialize_precision
का उपयोग करना शुरू किया। मैं इसPHP7.1 json_encode() फ्लोट समस्या
472,185
का एक उदाहरण मूल्य की वजह से बाद कि मूल्य json_encode()
माध्यम से चला गया
472,18500000000006
बनने के लिए अनुमान लगा रहा हूँ। मेरी खोज के बाद से, मैं वापस PHP 7.0.16 पर वापस आ गया है और अब मुझे json_encode()
के साथ समस्या नहीं है। मैंने PHP 7.0.16 पर वापस लौटने से पहले PHP 7.1.2 को अपडेट करने का भी प्रयास किया।
इस प्रश्न के पीछे तर्क PHP - Floating Number Precision से निकलता है, हालांकि इसके लिए सभी कारण json_encode()
में परिशुद्धता से serialize_precision उपयोग में परिवर्तन के कारण हैं।
अगर किसी को इस समस्या का समाधान पता है, तो मुझे तर्क/फिक्स पर सुनकर खुशी होगी। बहुआयामी सरणी से
अंश (पहले):
[staticYaxisInfo] => Array
(
[17] => stdClass Object
(
[variable_id] => 17
[static] => 1
[min] => 0
[max] => 472.185
[locked_static] => 1
)
)
और json_encode()
के माध्यम से जाने के बाद ...
"staticYaxisInfo":
{
"17":
{
"variable_id": "17",
"static": "1",
"min": 0,
"max": 472.18500000000006,
"locked_static": "1"
}
},
'ini_set ('serialize_precision', 14); ini_set ('परिशुद्धता', 14); 'संभवतया इसे धारावाहिक बनाने के लिए उपयोग किया जाएगा, हालांकि यदि आप वास्तव में अपने फ्लोट पर एक विशिष्ट परिशुद्धता पर भरोसा करते हैं तो आप कुछ गलत कर रहे हैं। – apokryfos
इसे 17 के रूप में डिफॉल्ट किया गया था, लेकिन मैंने इसे "बढ़ाया एल्गोरिदम" लेने के लिए -1 में बदल दिया। कोई पाँसा नहीं। – Gwi7d31
* "अगर कोई इस समस्या के समाधान के बारे में जानता है" * - क्या समस्या है? मुझे यहां कोई समस्या नहीं दिखाई दे रही है। यदि आप PHP का उपयोग कर JSON को डीकोड करते हैं तो आप उस मान को वापस ले लेंगे जिसे आपने एन्कोड किया था। और यदि आप इसे एक अलग भाषा का उपयोग करके डीकोड करते हैं तो शायद आपको वही वैल्यू मिल जाए। किसी भी तरह से, यदि आप 12 अंकों के साथ मान मुद्रित करते हैं तो आप मूल ("सही") मान वापस लेते हैं। क्या आपको अपने आवेदन द्वारा उपयोग की जाने वाली फ्लोट के लिए 12 से अधिक दशमलव अंकों की सटीकता की आवश्यकता है? – axiac