کتابخانه‌ی استاندارد · عدد و مجموعه

اعشاری decimal

عدد اعشاری دقیق برای پول و حسابداری، بدون خطای گرد کردن ممیز شناور.

واردسازی اعشاری
در این صفحه
  1. گونه‌ها
  2. روال‌ها

در اعشار۶۴، حاصل ۰٫۱ + ۰٫۲ دقیقاً ۰٫۳ نیست. برای علم و گرافیک این خطای کوچک مهم نیست، اما برای پول مهم است: ریال گم‌شده در حسابداری قابل‌قبول نیست. بسته‌ی اعشاری عدد را به شکل یک عدد صحیح بزرگ و یک «مقیاس» (تعداد رقم‌های بعد از ممیز) نگه می‌دارد؛ پس ۱۰٫۰۵ یعنی ۱۰۰۵ با مقیاس ۲، و هیچ خطایی پیش نمی‌آید.

جمع، تفریق و ضرب همیشه دقیق‌اند. تقسیم ممکن است بی‌پایان باشد (یک سوم)، پس باید بگویید چند رقم اعشار می‌خواهید و چطور گرد شود. شیوه گردکردن هفت روش گرد کردن را دارد؛ برای حساب‌های بانکی معمولاً نیم به زوج را به کار می‌برند.

گونه‌ها

شیوه گردکردن Rounding

جداشمار شیوه گردکردن
روش گرد کردن، وقتی رقم‌ها باید کم شوند. نمونه‌ی زیر همه‌ی روش‌ها را روی −۲٫۵ نشان می‌دهد.
نامانگلیسیگونهتوضیح
DownDownبه سمت صفر: رقم‌های اضافه دور ریخته می‌شوند.
UpUpدور از صفر.
FloorFloorرو به پایین، به سمت منفی بی‌نهایت.
CeilCeilرو به بالا، به سمت مثبت بی‌نهایت.
HalfUpHalfUpبه نزدیک‌ترین؛ نیم دور از صفر گرد می‌شود. همان گرد کردنی است که در مدرسه یاد گرفته‌ایم.
HalfDownHalfDownبه نزدیک‌ترین؛ نیم به سمت صفر گرد می‌شود.
HalfEvenHalfEvenبه نزدیک‌ترین؛ نیم به عدد زوج گرد می‌شود («گرد کردن بانکی»). در جمع تعداد زیادی عدد، خطای گرد کردن را به‌طور میانگین صفر نگه می‌دارد.
decimal-Round.salam
واردسازی اعشاری

روال ریشه:
    ع := اعشاری.از مقیاس(-۲۵، ۱)
    سرچاپ اعشاری.به رشته(اعشاری.گردکردن(ع، ۰))، اعشاری.به رشته(اعشاری.گردکردن نیم بالا(ع، ۰))، اعشاری.به رشته(اعشاری.بریدن(ع، ۰))
    هر ش در [اعشاری.شیوه گردکردن.به سمت صفر، اعشاری.شیوه گردکردن.دور از صفر، اعشاری.شیوه گردکردن.رو به پایین، اعشاری.شیوه گردکردن.رو به بالا، اعشاری.شیوه گردکردن.نیم رو به بالا، اعشاری.شیوه گردکردن.نیم رو به پایین، اعشاری.شیوه گردکردن.نیم به زوج]:
        چاپ اعشاری.به رشته(اعشاری.تغییر مقیاس(ع، ۰، ش))، ""
    پایان
    سرچاپ ""
    سرچاپ اعشاری.به رشته(اعشاری.پیراستن(اعشاری.از مقیاس(۱۲۵۰۰، ۴)))
پایان
خروجی-2 -3 -2 -2 -3 -3 -2 -3 -2 -2 1.25

اعشاری Dec

ساختار اعشاری
یک عدد اعشاری دقیق.
نامانگلیسیگونهتوضیح
unscaledunscaledbigint.Intعدد صحیح بدون ممیز؛ برای ۱۰٫۰۵ برابر ۱۰۰۵ است.
scalescaleصحیح = 0تعداد رقم‌های بعد از ممیز.
decimal-Dec.salam
واردسازی اعشاری
واردسازی عدد بزرگ

روال ریشه:
    ناپایا الف := اعشاری.از مقیاس(۱۰۰۵، ۲)
    دیرکن الف.آزادسازی()
    سرچاپ الف.به رشته()، الف.صفر است()، الف.علامت()
    ب := الف.همانند()
    سرچاپ اعشاری.به رشته(ب)، اعشاری.مقیاس(ب)، عدد بزرگ.به رشته(اعشاری.بی‌مقیاس(ب))
    سرچاپ اعشاری.به رشته(اعشاری.صفر())، اعشاری.به رشته(اعشاری.از صحیح(۴۲))
    سرچاپ اعشاری.به رشته(اعشاری.نو(عدد بزرگ.از صحیح(۳۱۴۱۵)، ۴))
    سرچاپ اعشاری.به رشته(اعشاری.از اعشاری ماشین(۰.۱، ۳))
    سرچاپ اعشاری.صفر است(اعشاری.صفر())، اعشاری.منفی است(اعشاری.از صحیح(-۱))، اعشاری.علامت(الف)
    ناپایا د := اعشاری.همانند(الف)
    اعشاری.آزادسازی(د)
پایان
خروجی10.05 false 1 10.05 2 1005 0 42 3.1415 0.100 true true 1

آزادسازی 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 سهم مساوی تقسیم می‌کند، طوری که جمع سهم‌ها دقیقاً همان مبلغ شود؛ باقیمانده‌ی خرد به سهم‌های اول می‌رسد.
decimal-Split.salam
واردسازی اعشاری

روال ریشه:
    کل := اعشاری.از مقیاس(۱۰۰۰۰، ۲)
    ناپایا سهم‌ها := اعشاری.تقسیم مساوی(کل، ۳)
    دیرکن اعشاری.آزادسازی همه(سهم‌ها)
    هر س در سهم‌ها:
        چاپ اعشاری.به رشته(س)، ""
    پایان
    سرچاپ ""
    سرچاپ اعشاری.به رشته(اعشاری.مجموع(سهم‌ها))
    ناپایا نسبت‌ها := وکتور {} برگردان وکتور<صحیح۶۴>
    دیرکن نسبت‌ها.آزادکن()
    نسبت‌ها.بیفزا(۱ برگردان صحیح۶۴)
    نسبت‌ها.بیفزا(۲ برگردان صحیح۶۴)
    ناپایا بخش‌ها := اعشاری.تخصیص نسبی(کل، نسبت‌ها)
    دیرکن اعشاری.آزادسازی همه(بخش‌ها)
    هر س در بخش‌ها:
        چاپ اعشاری.به رشته(س)، ""
    پایان
    سرچاپ ""
پایان
خروجی33.34 33.33 33.33 100.00 33.34 66.66

تخصیص نسبی 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: اعشاری): اعشاری
قرینه‌ی عدد.
decimal-Add.salam
واردسازی اعشاری

روال ریشه:
    الف := اعشاری.از مقیاس(۱۰، ۱)
    ب := اعشاری.از مقیاس(۲۰، ۱)
    سرچاپ اعشاری.به رشته(اعشاری.جمع(الف، ب))، اعشاری.به رشته(اعشاری.تفریق(الف، ب))، اعشاری.به رشته(اعشاری.ضرب(الف، ب))
    سرچاپ اعشاری.به رشته(اعشاری.تقسیم(الف، اعشاری.از صحیح(۳)، ۴، اعشاری.شیوه گردکردن.نیم به زوج))
    سرچاپ اعشاری.به رشته(اعشاری.تقسیم گردشده(الف، اعشاری.از صحیح(۳)، ۲))
    سرچاپ اعشاری.به رشته(اعشاری.توان(ب، ۳))، اعشاری.به رشته(اعشاری.قرینه(الف))، اعشاری.به رشته(اعشاری.قدرمطلق(اعشاری.قرینه(الف)))
    سرچاپ اعشاری.به رشته(اعشاری.ضرب صحیح(الف، ۳))، اعشاری.به رشته(اعشاری.جمع صحیح(الف، ۱))، اعشاری.به رشته(اعشاری.تفریق صحیح(الف، ۱))
    سرچاپ اعشاری.به رشته(اعشاری.تقسیم صحیح(اعشاری.از صحیح(۱۰)، ۴، ۲، اعشاری.شیوه گردکردن.رو به پایین))
    سرچاپ اعشاری.به رشته(اعشاری.درصد(اعشاری.از صحیح(۲۵۰۰۰۰)، اعشاری.از صحیح(۹)، ۰))
پایان
خروجی3.0 -1.0 2.00 0.3333 0.33 8.000 -1.0 1.0 3.0 2.0 0.0 2.50 22500

قدرمطلق 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: اعشاری): رشته
عدد را با همه‌ی رقم‌های اعشارش به متن تبدیل می‌کند.
decimal-Parse.salam
واردسازی اعشاری

روال ریشه:
    ناپایا شد := نادرست
    ق := اعشاری.تجزیه("1234567.891"، شد)
    سرچاپ شد، اعشاری.به رشته(ق)
    سرچاپ اعشاری.به رشته ثابت(ق، ۱)، اعشاری.قالب گروهی(ق، ۲، "٬"، "٫")
    سرچاپ اعشاری.به رشته(اعشاری.تجزیه با پیش فرض("نامعتبر"))
    ناپایا جا := نادرست
    سرچاپ اعشاری.به صحیح(اعشاری.از صحیح(۴۲)، جا)، جا، اعشاری.به اعشاری ماشین(ق)
پایان
خروجیtrue 1234567.891 1234567.9 1٬234٬567٫89 0 42 true 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: اعشاری): صحیح
دو عدد را مقایسه می‌کند، بدون توجه به مقیاسشان؛ ۱٫۵۰ و ۱٫۵ برابرند.
decimal-Cmp.salam
واردسازی اعشاری

روال ریشه:
    الف := اعشاری.از مقیاس(۱۵۰، ۲)
    ب := اعشاری.از مقیاس(۱۵، ۱)
    سرچاپ اعشاری.مقایسه(الف، ب)، اعشاری.یکسان است(الف، ب)
    سرچاپ اعشاری.کمتر است(الف، اعشاری.از صحیح(۲))، اعشاری.بیشتر است(الف، اعشاری.از صحیح(۲))
    سرچاپ اعشاری.به رشته(اعشاری.کمینه(الف، اعشاری.از صحیح(۱)))، اعشاری.به رشته(اعشاری.بیشینه(الف، اعشاری.از صحیح(۱)))
پایان
خروجی0 true true false 1 1.50

یکسان است 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