عدد اعشاری عددی است که صفر یا چند رقم بعد از جداکنندهی اعشار دارد. مثالهایی از آن عبارتاند از -2.4، 0.1، 3.14، 16.984025 و 1024.0.
انواع مختلف عدد اعشاری میتوانند تعداد متفاوتی رقم بعد از جداکنندهی اعشار ذخیره کنند؛ به این ویژگی، دقت آن گفته میشود. یعنی اگر PI را در یک single ذخیره کنید، تنها ۶ تا ۹ رقم اول ذخیره میشود (و رقم آخر گرد میشود).
اعداد اعشاری در Clojure بهصورت Double خوانده میشوند؛ با پسوند M، بهصورت BigDecimal خوانده میشوند.
Double: ۸ بایت (دقت حدود ۱۵ تا ۱۷ رقم). این رایجترین نوع است. بهصورت 2.45 نوشته میشود.BigDecimal: مقداری صحیح و بدون مقیاس با دقت دلخواه، بههمراه یک مقیاس صحیح ۳۲بیتی. بهصورت 2.45M نوشته میشود.در این تمرین با حسابهای پسانداز سر و کار دارید. هر سال، ماندهی حساب پسانداز شما بر اساس نرخ سود آن بهروزرسانی میشود. نرخ سودی که بانک به شما میدهد به مقدار پول موجود در حساب شما (یعنی ماندهی آن) بستگی دارد:
1000 دلار.1000 دلار و کمتر از 5000 دلار.5000 دلار.هر سال، پیش از آنکه ماندهی حساب پساندازتان بهروزرسانی شود، دولت به شما اجازه میدهد درصدی از پولتان را بدون پرداخت مالیات به امور خیریه اهدا کنید. چون آدم خوبی هستید، اگر ماندهی حسابتان در پایان سال مثبت باشد، دو برابر این مقدار را به امور خیریه اهدا میکنید که به نزدیکترین دلار کامل به سمت پایین گرد میشود.
سه کار در پیش دارید که هرکدام به ماندهی حساب و نرخ سود آن میپردازد.
تابع interest-rate را پیادهسازی کنید تا نرخ سود را بر اساس ماندهی دادهشده محاسبه کند:
(interest-rate 200.75M)
;;=> 0.5
توجه کنید که مقدار بازگشتی یک Double است.
تابع annual-balance-update را پیادهسازی کنید تا بهروزرسانی سالانهی مانده را با در نظر گرفتن نرخ سود محاسبه کند:
(annual-balance-update 200.75M)
;;=> 201.75375M
توجه کنید که مقدار بازگشتی یک BigDecimal است.
تابع amount-to-donate را پیادهسازی کنید تا بر اساس مانده و درصد معاف از مالیاتی که دولت تعیین کرده است، محاسبه کند چه مقدار پول باید به امور خیریه اهدا شود:
(def balance 550.5M)
(def tax-free-percentage 2.5)
(amount-to-donate balance tax-free-percentage)
;;=> 27
توجه کنید که مقدار بازگشتی یک int است.