బ్లాగ్
Boring Expenses డబ్బును ఎలా నిల్వ చేస్తుంది (అది ఎందుకు పూర్ణాంకం)
ఒక పైసా పోగొట్టుకోవడానికి ఇది క్లాసిక్ మార్గం. దాదాపు ఏ ప్రోగ్రామింగ్ భాషనైనా 0.1 + 0.2 ఎంత అని అడగండి, అది 0.30000000000000004 అంటుంది. ఇది భాష బగ్ కాదు — బైనరీ ఫ్లోటింగ్-పాయింట్ సంఖ్యలు ఇలాగే పనిచేస్తాయి. చాలా దశాంశ భిన్నాలను అవి ఖచ్చితంగా సూచించలేవు, కాబట్టి చిన్న లోపాలు చొరబడతాయి. భౌతిక శాస్త్రానికి సరే; డబ్బుకు కాదు.
ఫైనాన్స్ యాప్కు “దాదాపు సరైనది” తప్పుడు సమాధానం. కాబట్టి Boring Expenses ఏ మొత్తాన్నీ దశాంశ సంఖ్యగా నిల్వ చేయనే చేయదు.
అతి చిన్న యూనిట్ను పూర్ణాంకంగా నిల్వ చేయండి
డబ్బు సాఫ్ట్వేర్ ఎప్పటి నుండో వాడే ఉపాయం, అతి చిన్న యూనిట్లో పనిచేసి దాన్ని పూర్ణాంకంగా ఉంచడం. $4.20 బదులు 420 — సెంట్ల సంఖ్య — నిల్వ చేస్తారు. పూర్ణాంకాలు ఖచ్చితమైనవి. రోజంతా కూడండి, తీసివేయండి, మొత్తాలు వేయండి, రౌండింగ్ ధూళి ఎప్పుడూ పేరుకోదు.
Boring Expenses ఇంకో అడుగు ముందుకు వెళ్లి మొత్తాలను చాలా సూక్ష్మమైన ఉప-యూనిట్లలో నిల్వ చేస్తుంది (“ఒక పూర్తి యూనిట్కు 10 కోట్లు” అనుకోండి); ఇది కరెన్సీలకు, భవిష్యత్ అవసరాలకు చాలా చోటు వదులుతుంది, అదే సమయంలో అంతా సాదా Int గానే ఉంటుంది. స్క్రీన్పై మీరు చూసేదానికీ, దాని నుండీ మార్పిడి అంచుల్లో మాత్రమే జరుగుతుంది — మీరు మొత్తాన్ని టైప్ చేసినప్పుడు, మేము దాన్ని చూపడానికి ఫార్మాట్ చేసినప్పుడు.
// ఉదాహరణ మాత్రమే, ఖచ్చితమైన కోడ్ కాదు:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
ఇది మీకు ఎందుకు ముఖ్యం
- మొత్తాలు ఖచ్చితమైనవి. మీ నెలవారీ మొత్తం నిజమైన మొత్తం, జాబితా పెరిగే కొద్దీ ఒక పైసా జారిపోయే అంకె కాదు.
- సింక్ స్థిరంగా ఉంటుంది. ఒక పూర్ణాంకం మీ iPhone, Watch, iPad లో ఒకే అర్థం. సరిదిద్దాల్సిన అస్పష్టత లేదు.
- ఎగుమతులను నమ్మవచ్చు. మీరు ఎగుమతి చేసే CSV యాప్తో పైసాకు పైసా సరిపోతుంది.
ఇది ఒక చిన్న, ఆడంబరం లేని నిర్ణయం — మాకు నచ్చే రకం. మీరు దీన్ని ఎప్పుడూ చూడరు, అదే ఉద్దేశం: అంకెలు సరిగ్గా కలుస్తాయి.