Ravindra BagaleCourses & study guides Track your progress

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 यांची तुलना करा.

पायऱ्या

  1. पहिलं उदाहरण run करा आणि 0.1 + 0.2 = 0.3 चा result बघा.
  2. दुसरं उदाहरण run करा आणि दोन्ही sum columns ची तुलना करा.
  3. amount_cents मुळे अचूक पूर्ण आकडा मिळतो हे लक्षात घ्या.
  4. शेवटची रक्कम दाखवतानाच 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_sumcents_sumcents_as_money
0.30000000000000004300.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.