6. Analysts ना रोज भेटणारे SQL Data Types
6.2 पैशाचे आकडे floating-point अंदाजावर का ठेवू नयेत
का (Why). Banks आणि दुकानांना प्रत्येक पैसा आणि प्रत्येक cent बरोबर लागतो. REAL म्हणून साठवलेले दशांश आकडे अगदी थोडेसे चुकीचे असू शकतात.
काय (What). REAL values binary floating-point आकडे म्हणून साठवल्या जातात, आणि 0.1 सारखे बहुतेक दशांश आकडे त्यात फक्त जवळपास बरोबर साठवता येतात. सुरक्षित सवय म्हणजे पैसे INTEGER column मध्ये पूर्ण cents किंवा paise म्हणून ठेवायचे, आणि दाखवताना फक्त 100 ने भागायचे. पूर्ण आकड्यांची बेरीज SQLite च्या integer range मध्ये (सुमारे 9.2 quintillion पर्यंत) राहते तोपर्यंत अचूक असते.
कसं (How). एकाच दोन छोट्या deposits साठी REAL sum आणि INTEGER cents sum यांची तुलना करा.
पायऱ्या
- पहिलं उदाहरण run करा आणि 0.1 + 0.2 = 0.3 चा result बघा.
- दुसरं उदाहरण run करा आणि दोन्ही sum columns ची तुलना करा.
- amount_cents मुळे अचूक पूर्ण आकडा मिळतो हे लक्षात घ्या.
- शेवटची रक्कम दाखवतानाच cents total ला 100.0 ने भागा.
उदाहरणे
उदाहरण 1 · dataset: northstar_bank
SELECT 0.1 + 0.2 = 0.3 AS looks_equal;Output
| looks_equal |
|---|
| 0 |
Meaning. उत्तर 0 आहे, म्हणजे false. Floating point मध्ये 0.1 अधिक 0.2 हे अगदी बरोबर 0.3 होत नाही.
उदाहरण 2 · dataset: northstar_bank
SELECT SUM(amount) AS real_sum,
SUM(amount_cents) AS cents_sum,
SUM(amount_cents) / 100.0 AS cents_as_money
FROM transactions
WHERE txn_id IN (22, 23);Output
| real_sum | cents_sum | cents_as_money |
|---|---|---|
| 0.30000000000000004 | 30 | 0.3 |
Meaning. REAL sum च्या शेवटी अगदी छोटी चूक येते. Cents sum अगदी बरोबर 30 आहे, आणि 100 ने भागल्यावर ते 0.30 होतं.
Ravindra Bagale's Tip
Some apps round the display, so a REAL sum may look correct on screen. Check money totals with an INTEGER cents column when one exists.
Ravindra Bagale's Tip – मराठी
काही apps दाखवताना आकडा round करतात, त्यामुळे REAL sum screen वर बरोबर दिसू शकतो. INTEGER cents column असेल तर पैशाचे totals त्याने तपासा.
Ravindra Bagale's Tip – हिंदी
कुछ apps दिखाते समय आंकड़ा round कर देते हैं, इसलिए REAL sum स्क्रीन पर सही दिख सकता है। INTEGER cents column हो तो पैसों के totals उसी से जाँचिए।