ماژول decimal نوع داده Decimal را برای حساب اعداد اعشاری شناور ارائه میدهد. در مقایسه با پیادهسازی داخلی float اعداد اعشاری دودویی، این کلاس به طور خاص برای موارد زیر مفید است:
به عنوان مثال، محاسبه مالیات ۵ درصدی روی هزینه تلفن ۷۰ سنتی نتایج متفاوتی در اعداد اعشاری شناور و اعداد اعشاری دودویی میدهد. تفاوت زمانی مهم میشود که نتایج به نزدیکترین سنت گرد شوند:
>>> from decimal import *
>>> round(Decimal('0.70') * Decimal('1.05'), 2)
Decimal('0.74')
>>> round(.70 * 1.05, 2)
0.73
نتیجه Decimal یک صفر انتهایی نگه میدارد و به طور خودکار چهار رقم معنادار از ضربکنندههایی با دو رقم معنادار استنتاج میکند. Decimal ریاضیات را همانطور که دستی انجام میشود بازتولید میکند و از مشکلاتی که ممکن است وقتی اعداد اعشاری دودویی نمیتوانند مقادیر اعشاری را دقیقاً نمایش دهند جلوگیری میکند.
نمایش دقیق به کلاس Decimal امکان انجام محاسبات باقیمانده و آزمونهای برابری را میدهد که برای اعداد اعشاری دودویی نامناسب هستند:
>>> Decimal('1.00') % Decimal('.10')
Decimal('0.00')
>>> 1.00 % 0.10
0.09999999999999995
>>> sum([Decimal('0.1')]*10) == Decimal('1.0')
True
>>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 1.0
False
ماژول decimal حساب با هر میزان دقت لازم را فراهم میکند:
>>> getcontext().prec = 36
>>> Decimal(1) / Decimal(7)
Decimal('0.142857142857142857142857142857142857')این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://docs.python.org/3/tutorial