اعشاری decimal
عدد اعشاری دقیق برای پول و حسابداری، بدون خطای گرد کردن ممیز شناور.
واردسازی اعشاری
در اعشار۶۴، حاصل ۰٫۱ + ۰٫۲ دقیقاً ۰٫۳ نیست. برای علم و گرافیک این خطای کوچک مهم نیست، اما برای پول مهم است: ریال گمشده در حسابداری قابلقبول نیست. بستهی اعشاری عدد را به شکل یک عدد صحیح بزرگ و یک «مقیاس» (تعداد رقمهای بعد از ممیز) نگه میدارد؛ پس ۱۰٫۰۵ یعنی ۱۰۰۵ با مقیاس ۲، و هیچ خطایی پیش نمیآید.
جمع، تفریق و ضرب همیشه دقیقاند. تقسیم ممکن است بیپایان باشد (یک سوم)، پس باید بگویید چند رقم اعشار میخواهید و چطور گرد شود. شیوه گردکردن هفت روش گرد کردن را دارد؛ برای حسابهای بانکی معمولاً نیم به زوج را به کار میبرند.
گونهها
شیوه گردکردن Rounding
جداشمار شیوه گردکردن| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| Down | Down | | به سمت صفر: رقمهای اضافه دور ریخته میشوند. |
| Up | Up | | دور از صفر. |
| Floor | Floor | | رو به پایین، به سمت منفی بینهایت. |
| Ceil | Ceil | | رو به بالا، به سمت مثبت بینهایت. |
| HalfUp | HalfUp | | به نزدیکترین؛ نیم دور از صفر گرد میشود. همان گرد کردنی است که در مدرسه یاد گرفتهایم. |
| HalfDown | HalfDown | | به نزدیکترین؛ نیم به سمت صفر گرد میشود. |
| HalfEven | HalfEven | | به نزدیکترین؛ نیم به عدد زوج گرد میشود («گرد کردن بانکی»). در جمع تعداد زیادی عدد، خطای گرد کردن را بهطور میانگین صفر نگه میدارد. |
واردسازی اعشاری
روال ریشه:
ع := اعشاری.از مقیاس(-۲۵، ۱)
سرچاپ اعشاری.به رشته(اعشاری.گردکردن(ع، ۰))، اعشاری.به رشته(اعشاری.گردکردن نیم بالا(ع، ۰))، اعشاری.به رشته(اعشاری.بریدن(ع، ۰))
هر ش در [اعشاری.شیوه گردکردن.به سمت صفر، اعشاری.شیوه گردکردن.دور از صفر، اعشاری.شیوه گردکردن.رو به پایین، اعشاری.شیوه گردکردن.رو به بالا، اعشاری.شیوه گردکردن.نیم رو به بالا، اعشاری.شیوه گردکردن.نیم رو به پایین، اعشاری.شیوه گردکردن.نیم به زوج]:
چاپ اعشاری.به رشته(اعشاری.تغییر مقیاس(ع، ۰، ش))، ""
پایان
سرچاپ ""
سرچاپ اعشاری.به رشته(اعشاری.پیراستن(اعشاری.از مقیاس(۱۲۵۰۰، ۴)))
پایاناعشاری Dec
ساختار اعشاری| نام | انگلیسی | گونه | توضیح |
|---|---|---|---|
| unscaled | unscaled | bigint.Int | عدد صحیح بدون ممیز؛ برای ۱۰٫۰۵ برابر ۱۰۰۵ است. |
| scale | scale | صحیح = 0 | تعداد رقمهای بعد از ممیز. |
واردسازی اعشاری
واردسازی عدد بزرگ
روال ریشه:
ناپایا الف := اعشاری.از مقیاس(۱۰۰۵، ۲)
دیرکن الف.آزادسازی()
سرچاپ الف.به رشته()، الف.صفر است()، الف.علامت()
ب := الف.همانند()
سرچاپ اعشاری.به رشته(ب)، اعشاری.مقیاس(ب)، عدد بزرگ.به رشته(اعشاری.بیمقیاس(ب))
سرچاپ اعشاری.به رشته(اعشاری.صفر())، اعشاری.به رشته(اعشاری.از صحیح(۴۲))
سرچاپ اعشاری.به رشته(اعشاری.نو(عدد بزرگ.از صحیح(۳۱۴۱۵)، ۴))
سرچاپ اعشاری.به رشته(اعشاری.از اعشاری ماشین(۰.۱، ۳))
سرچاپ اعشاری.صفر است(اعشاری.صفر())، اعشاری.منفی است(اعشاری.از صحیح(-۱))، اعشاری.علامت(الف)
ناپایا د := اعشاری.همانند(الف)
اعشاری.آزادسازی(د)
پایانآزادسازی free
روال آزادسازی()نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
صفر است is_zero
روال صفر است(): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
علامت sign
روال علامت(): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
همانند clone
روال همانند(): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
به رشته to_str
روال به رشته(): رشتهنمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
روالها
تقسیم مساوی Split
روال تقسیم مساوی(total: اعشاری، n: صحیح): وکتور<اعشاری>n سهم مساوی تقسیم میکند، طوری که جمع سهمها دقیقاً همان مبلغ شود؛ باقیماندهی خرد به سهمهای اول میرسد.واردسازی اعشاری
روال ریشه:
کل := اعشاری.از مقیاس(۱۰۰۰۰، ۲)
ناپایا سهمها := اعشاری.تقسیم مساوی(کل، ۳)
دیرکن اعشاری.آزادسازی همه(سهمها)
هر س در سهمها:
چاپ اعشاری.به رشته(س)، ""
پایان
سرچاپ ""
سرچاپ اعشاری.به رشته(اعشاری.مجموع(سهمها))
ناپایا نسبتها := وکتور {} برگردان وکتور<صحیح۶۴>
دیرکن نسبتها.آزادکن()
نسبتها.بیفزا(۱ برگردان صحیح۶۴)
نسبتها.بیفزا(۲ برگردان صحیح۶۴)
ناپایا بخشها := اعشاری.تخصیص نسبی(کل، نسبتها)
دیرکن اعشاری.آزادسازی همه(بخشها)
هر س در بخشها:
چاپ اعشاری.به رشته(س)، ""
پایان
سرچاپ ""
پایانتخصیص نسبی Allocate
روال تخصیص نسبی(total: اعشاری، ratios: وکتور<صحیح۶۴>): وکتور<اعشاری>نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Split.salam
آزادسازی همه FreeAll
روال آزادسازی همه(v &: وکتور<اعشاری>)نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Split.salam
تغییر مقیاس Rescale
روال تغییر مقیاس(d: اعشاری، scale: صحیح، mode: شیوه گردکردن): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Round.salam
گردکردن Round
روال گردکردن(d: اعشاری، scale: صحیح): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Round.salam
گردکردن نیم بالا RoundHalfUp
روال گردکردن نیم بالا(d: اعشاری، scale: صحیح): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Round.salam
بریدن Truncate
روال بریدن(d: اعشاری، scale: صحیح): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Round.salam
پیراستن Trim
روال پیراستن(d: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Round.salam
قرینه Neg
روال قرینه(d: اعشاری): اعشاریواردسازی اعشاری
روال ریشه:
الف := اعشاری.از مقیاس(۱۰، ۱)
ب := اعشاری.از مقیاس(۲۰، ۱)
سرچاپ اعشاری.به رشته(اعشاری.جمع(الف، ب))، اعشاری.به رشته(اعشاری.تفریق(الف، ب))، اعشاری.به رشته(اعشاری.ضرب(الف، ب))
سرچاپ اعشاری.به رشته(اعشاری.تقسیم(الف، اعشاری.از صحیح(۳)، ۴، اعشاری.شیوه گردکردن.نیم به زوج))
سرچاپ اعشاری.به رشته(اعشاری.تقسیم گردشده(الف، اعشاری.از صحیح(۳)، ۲))
سرچاپ اعشاری.به رشته(اعشاری.توان(ب، ۳))، اعشاری.به رشته(اعشاری.قرینه(الف))، اعشاری.به رشته(اعشاری.قدرمطلق(اعشاری.قرینه(الف)))
سرچاپ اعشاری.به رشته(اعشاری.ضرب صحیح(الف، ۳))، اعشاری.به رشته(اعشاری.جمع صحیح(الف، ۱))، اعشاری.به رشته(اعشاری.تفریق صحیح(الف، ۱))
سرچاپ اعشاری.به رشته(اعشاری.تقسیم صحیح(اعشاری.از صحیح(۱۰)، ۴، ۲، اعشاری.شیوه گردکردن.رو به پایین))
سرچاپ اعشاری.به رشته(اعشاری.درصد(اعشاری.از صحیح(۲۵۰۰۰۰)، اعشاری.از صحیح(۹)، ۰))
پایانقدرمطلق Abs
روال قدرمطلق(d: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
جمع Add
روال جمع(a: اعشاری، b: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
تفریق Sub
روال تفریق(a: اعشاری، b: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
ضرب Mul
روال ضرب(a: اعشاری، b: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
تقسیم Div
روال تقسیم(a: اعشاری، b: اعشاری، scale: صحیح، mode: شیوه گردکردن): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
تقسیم گردشده DivRound
روال تقسیم گردشده(a: اعشاری، b: اعشاری، scale: صحیح): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
توان Pow
روال توان(d: اعشاری، n: صحیح): اعشاریn.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
ضرب صحیح MulInt
روال ضرب صحیح(d: اعشاری، v: صحیح۶۴): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
جمع صحیح AddInt
روال جمع صحیح(d: اعشاری، v: صحیح۶۴): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
تفریق صحیح SubInt
روال تفریق صحیح(d: اعشاری، v: صحیح۶۴): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
تقسیم صحیح DivInt
روال تقسیم صحیح(d: اعشاری، v: صحیح۶۴، scale: صحیح، mode: شیوه گردکردن): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
درصد Percent
روال درصد(d: اعشاری، pct: اعشاری، scale: صحیح): اعشاریpct درصدِ عدد را، با تعداد رقم اعشار دادهشده، حساب میکند؛ مثلاً مالیات ۹ درصد.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Add.salam
مجموع Sum
روال مجموع(items: وکتور<اعشاری>): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Split.salam
به رشته ToStr
روال به رشته(d: اعشاری): رشتهواردسازی اعشاری
روال ریشه:
ناپایا شد := نادرست
ق := اعشاری.تجزیه("1234567.891"، شد)
سرچاپ شد، اعشاری.به رشته(ق)
سرچاپ اعشاری.به رشته ثابت(ق، ۱)، اعشاری.قالب گروهی(ق، ۲، "٬"، "٫")
سرچاپ اعشاری.به رشته(اعشاری.تجزیه با پیش فرض("نامعتبر"))
ناپایا جا := نادرست
سرچاپ اعشاری.به صحیح(اعشاری.از صحیح(۴۲)، جا)، جا، اعشاری.به اعشاری ماشین(ق)
پایانبه رشته ثابت ToStrFixed
روال به رشته ثابت(d: اعشاری، scale: صحیح): رشتهscale رقم اعشار به متن تبدیل میکند.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
قالب گروهی FormatGrouped
روال قالب گروهی(d: اعشاری، scale: صحیح، group: رشته، point: رشته): رشته"٬" و "٫" بدهید.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
تجزیه Parse
روال تجزیه(s: رشته، ok &: منطقی): اعشاریok نادرست میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
تجزیه با پیش فرض ParseOr
روال تجزیه با پیش فرض(s: رشته): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
به صحیح ToInt
روال به صحیح(d: اعشاری، ok &: منطقی): صحیح۶۴ok نادرست میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
به اعشاری ماشین ToFloat
روال به اعشاری ماشین(d: اعشاری): اعشار۶۴نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Parse.salam
صفر Zero
روال صفر(): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
از صحیح FromInt
روال از صحیح(v: صحیح۶۴): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
از مقیاس FromScaled
روال از مقیاس(unscaled: صحیح۶۴، scale: صحیح): اعشاریاز مقیاس(۱۰۰۵، ۲) یعنی ۱۰٫۰۵. برای مبلغهایی که به ریز واحد (مثل سنت) ذخیره شدهاند مناسب است.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
نو New
روال نو(unscaled: bigint.Int، scale: صحیح): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
همانند Clone
روال همانند(d: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
آزادسازی Free
روال آزادسازی(d &: اعشاری)نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
از اعشاری ماشین FromFloat
روال از اعشاری ماشین(f: اعشار۶۴، scale: صحیح): اعشاریاعشار۶۴ را با تعداد رقم اعشار دلخواه تبدیل میکند. خطای خود اعشار۶۴ با گرد کردن حذف میشود؛ ۰٫۱ با سه رقم دقیقاً ۰٫۱۰۰ میشود.نمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
صفر است IsZero
روال صفر است(d: اعشاری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
علامت Sign
روال علامت(d: اعشاری): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
منفی است IsNegative
روال منفی است(d: اعشاری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
مقیاس Scale
روال مقیاس(d: اعشاری): صحیحنمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
بیمقیاس Unscaled
روال بیمقیاس(d: اعشاری): bigint.Intنمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Dec.salam
مقایسه Cmp
روال مقایسه(a: اعشاری، b: اعشاری): صحیحواردسازی اعشاری
روال ریشه:
الف := اعشاری.از مقیاس(۱۵۰، ۲)
ب := اعشاری.از مقیاس(۱۵، ۱)
سرچاپ اعشاری.مقایسه(الف، ب)، اعشاری.یکسان است(الف، ب)
سرچاپ اعشاری.کمتر است(الف، اعشاری.از صحیح(۲))، اعشاری.بیشتر است(الف، اعشاری.از صحیح(۲))
سرچاپ اعشاری.به رشته(اعشاری.کمینه(الف، اعشاری.از صحیح(۱)))، اعشاری.به رشته(اعشاری.بیشینه(الف، اعشاری.از صحیح(۱)))
پایانیکسان است Equals
روال یکسان است(a: اعشاری، b: اعشاری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Cmp.salam
کمتر است Less
روال کمتر است(a: اعشاری، b: اعشاری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Cmp.salam
بیشتر است Greater
روال بیشتر است(a: اعشاری، b: اعشاری): منطقینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Cmp.salam
کمینه Min
روال کمینه(a: اعشاری، b: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Cmp.salam
بیشینه Max
روال بیشینه(a: اعشاری، b: اعشاری): اعشارینمونهی این مورد همراه با موارد بالاتر آمده است: decimal-Cmp.salam