سوئیفت دو دستهی اصلی از عددها را ارائه میدهد: عددهای صحیح و عددهای ممیز شناور.
0، 1، -1، 42 و -273.0.0، 3.14 و -1.36969e-10.میتوانید برای خوانایی بیشتر، در عددهای نوشتهشده در کد زیرخط بگذارید: 1_000_000 دقیقاً همان 1000000 است.
عددهای ممیز شناور را میتوان در نماد اعشاری یا نمایی نوشت.
در بیشتر موارد، برای عددهای صحیح از Int و برای عددهای ممیز شناور از Double استفاده میکنید:
let speed: Int = 42 // Explicit Int
let pi: Double = 3.14 // Explicit Double
let giga: Double = 1_000_000_000 // Double with readability underscores
let plancksConstant: Double = 6.62607015e-34 // Double in scientific notation
سوئیفت عملگرهای حساب استانداردی برای محاسبههای عددی ارائه میدهد:
| عملگر | توضیح | مثال |
|---|---|---|
+ |
جمع |
4 + 6 برابر است با 10
|
- |
تفریق |
15 - 10 برابر است با 5
|
* |
ضرب |
2 * 3 برابر است با 6
|
سوئیفت از نظر نوع ایمن است و اجازه نمیدهد نوعهای عددی متفاوت در عملیات حسابی با هم ترکیب شوند.
نمیتوانید یک Int و یک Double را مستقیماً با هم جمع یا ضرب کنید؛ ابتدا باید یکی از این دو نوع را به نوع دیگر تبدیل کنید.
عملگر / تقسیم را انجام میدهد.
وقتی هر دو عملوند عدد صحیح باشند، تقسیم صحیح بخش اعشاری را حذف میکند:
5.0 / 2.0 // 2.5 (Double division)
5 / 2 // 2 (integer division truncates the remainder)
تقسیم یک عدد ممیز شناور ناصفر بر صفر به inf یا -inf میانجامد.
تقسیم 0.0 بر 0.0 مقدار nan را تولید میکند (عدد نیست).
در مقابل، تقسیم یک عدد صحیح بر صفر باعث خطای زمان کامپایل یا زمان اجرا میشود:
print(5.0 / 0.0) // Prints inf
print(-5.0 / 0.0) // Prints -inf
print(0.0 / 0.0) // Prints nan
// The following line will not compile:
// print(5 / 0) // Error: Division by zero
عملگر باقیمانده (%) باقیماندهی حاصل از تقسیم دو عدد صحیح را محاسبه میکند:
5 % 2 // 1
-5 % 2 // -1
// Dividing by zero produces an error:
// 5 % 0 // Error: Division by zero
در سوئیفت، % یک عملگر واقعی باقیمانده است، نه یک عملگر پیمانه.
نتیجه همیشه علامت عملوند اول (مقسوم) را میگیرد، بدون توجه به علامت عملوند دوم:
5 % -2 // 1
-5 % 2 // -1
میتوانید یک عدد ممیز شناور را با متد rounded() گرد کنید.
بهطور پیشفرض، rounded() به نزدیکترین عدد صحیح گرد میکند.
همچنین میتوانید یک قاعدهی گرد کردن مشخص، مانند .up یا .down، تعیین کنید:
let x = 3.14
let y = x.rounded() // 3.0
let w = x.rounded(.down) // 3.0
let z = x.rounded(.up) // 4.0
وقتی یک ثابت یا متغیر عددی را بدون تعیین نوع اعلام میکنید، سوئیفت نوع آن را استنتاج میکند:
Int در نظر گرفته میشوند.Double در نظر گرفته میشوند.let x = 42 // Inferred as Int
let y = 42.0 // Inferred as Double
let z: Double = 42 // Explicitly typed as Double
برای انجام عملیات بین مقدارهایی با نوعهای متفاوت، یکی از مقدارها را با سازندههای نوع مانند Double(_:) یا Int(_:) تبدیل کنید:
let integerCount = 42
let floatingCount = Double(integerCount)
print(floatingCount) // Prints 42.0
let pi = 3.14
let integerPi = Int(pi)
print(integerPi) // Prints 3 (fractional part is truncated)
در این تمرین، کدی مینویسید که به یک فریلنسر کمک میکند با یک مدیر پروژه صحبت کند. وظیفهی شما ارائهی چند ابزار کمکی است تا نرخهای روزانه و ماهانه را سریع محاسبه کنید، بهصورت اختیاری با تخفیف مشخصی که داده میشود.
ابتدا چند قاعده بین فریلنسر و مدیر پروژه تعیین میکنیم:
گاهی فریلنسر پیشنهاد میدهد روی نرخ روزانهاش تخفیف اعمال کند (برای مثال برای وفادارترین مشتریان یا مشتریان غیرانتفاعی).
تخفیفها به صورت اعداد اعشاری مدلسازی میشوند که درصد را نشان میدهند، برای مثال 25.0 (۲۵٪).
تابعی به نام dailyRateFrom پیادهسازی کنید تا نرخ روزانه را بر اساس نرخ ساعتی که به عنوان پارامتر داده میشود محاسبه کند.
قرارداد تعیین میکند که یک روز ۸ ساعت قابل صورتحساب دارد.
dailyRateFrom(hourlyRate: 60)
// Returns 480.0
نرخ روزانهی برگرداندهشده باید از نوع Double باشد.
تابع monthlyRateFrom را پیادهسازی کنید تا نرخ ماهانهی تخفیفخورده را محاسبه کند.
این تابع دو پارامتر میگیرد: نرخ ساعتی و تخفیف به درصد.
monthlyRateFrom(hourlyRate: 77, withDiscount: 10.5)
// Returns 12129
نرخ ماهانهی برگرداندهشده باید به نزدیکترین عدد صحیح به بالا گرد شود (سقف گرفته شود).
تابع workdaysIn را پیادهسازی کنید که بودجه، نرخ ساعتی و تخفیف را میگیرد و محاسبه میکند که این مبلغ چند روز کاری کامل را پوشش میدهد.
workdaysIn(budget: 20000, hourlyRate: 80, withDiscount: 11.0)
// Returns 35.0
تعداد روزهای برگرداندهشده باید به پایین (با گرفتن کف) تا نزدیکترین عدد صحیح گرد شود.