आपकी समस्या का कुछ लेना-देना है कि आपका फ़्लोटिंग पॉइंट मान कितना बड़ा है, लेकिन मुझे 100% यकीन नहीं है कि क्यों। मैंने छोटी संख्या के साथ एक समान पंक्ति को अद्यतन करने का परीक्षण किया और यह ठीक काम किया। आपको जहां भी संभव हो उद्धरण चिह्नों का उपयोग करने से बचना चाहिए क्योंकि इसके लिए अतिरिक्त प्रसंस्करण की आवश्यकता होती है। यह SO प्रश्न देखें:मूल्य
यहाँ मेरा आसान कामकाज है जैसे टिम बेगेलेसेन ने सुझाव दिया था:
CREATE TABLE `xxx` (
`uid` int(11) NOT NULL,
`money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
`real_money` float(10,2) NOT NULL ,
`available_invoice` float(10,2) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
सम्मिलित करें:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
बिना तार के अपडेट करें:
update xxx set money = money - 20 where uid = 1234;
बड़े फ़्लोटिंग पॉइंट मानों के साथ गणना करते समय कुछ अजीब चीजें होती हैं। इनमें से कुछ मुद्दे मशीन पर निर्भर हैं और आपके पास किस प्रकार के प्रोसेसर से संबंधित हैं। यहां और पढ़ें:http://dev.mysql .com/doc/refman/5.7/hi/problems-with-float.html
इसके अलावा, एक अन्य SO प्रश्न के अनुसार फ़्लोटिंग पॉइंट मान धन मूल्यों को संग्रहीत करने का एक अच्छा तरीका नहीं है। फ्लोट और दशमलव डेटा प्रकार के बीच अंतर (दूसरा उत्तर देखें)।
ऐसा लगता है कि decimal
. का उपयोग कर रहे हैं और numeric
डेटा प्रकार mysql में पैसे के कॉलम के लिए सर्वोत्तम हैं।