دوره آموزش پایتون
ماژول decimal یک نوع داده ده دهی (Decimal) را برای ریاضیات ممیز شناور ده دهی (decimal floating point arithmetic) ارائه می کند. در مقایسه با پیاده سازی float داخلی، برای ممیز شناور دودویی، این کلاس خصوصا برای موارد زیر مفید است.
- برنامه های کاربردی مالی و سایر کاربردهایی که نیاز به نمایش ده دهی دقیق دارند.
- کنترل داشتن روی دقت.
- کنترل داشتن روی گرد کردن برای برآورده کردن ملزومات قانونی یا نظارتی.
- ردیابی مکان های اعشار قابل توجه.
- برنامه های کاربردی که در آنها کاربر انتظار دارد، نتایج با محاسبات انجام شده به صورت دستی، هماهنگ باشند.
برای مثال، محاسبه 5 درصد از هزینه تلفن به مبلغ 70 سنت، در ممیز شناور(اعشار) ده دهی و ممیز شناور دو دویی نتایج متفاوتی می دهد. زمانی که نتایج به نزدیک ترین سنت گرد می شوند، این تفاوت قابل توجه می شود.
>>> from decimal import *
>>> round(Decimal('0.70') * Decimal('1.05'), 2)
Decimal('0.74')
>>> round(.70 * 1.05, 2)
0.73
نتایج Decimal یک صفر را در ادامه نگه می دارد، و به طور خودکار four place significance مضروب ها را two place significance در نظر می گیر. ده دهی، محاسبات را همانند محاسبات انجام شده به صورت دستی تولید می کند، و از بروز مسائلی که ممکن است در زمانی که ممیز شناور دو دویی نمی تواند مقادیر ده دهی را دقیقا نمایش دهد ، اجتناب می کند.
نمایش دقیق، کلاس Decimal را قادر می سازد تا محاسبات modulo و تست های برابری که برای ممیز شناور دو دویی مناسب نیست را انجام دهد.
>>> Decimal('1.00') % Decimal('.10')
Decimal('0.00')
>>> 1.00 % 0.10
0.09999999999999995
>>> sum([Decimal('0.1')]*10) == Decimal('1.0')
True
>>> sum([0.1]*10) == 1.0
False
ماژول decimal محاسبات را با میزان دقتی که مورد نیاز است انجام می دهد.
>>> getcontext().prec = 36
>>> Decimal(1) / Decimal(7)
Decimal('0.142857142857142857142857142857142857')