JavaScript Numbers
اعداد در جاوا اسکریپت
برخلاف زبانهای برنامهنویسی دیگر، جاوا اسکریپت انواع مختلف اعداد، مانند صحیح، کوتاه، بلند، اعشاری و ... را استفاده نمیکند. جاوا اسکریپت همیشه اعداد را به صورت اعشاری (double precision floating point) ذخیره میکند.
دقت
اعداد صحیح (اعداد بدون اعشار یا توان) تا 15 رقم دقت دارند.
var x = 999999999999999; // x will be 999999999999999
var y = 9999999999999999; // y will be 10000000000000000
حداکثر اعداد اعشار 17 رقم است، اما اعمال حسابی روی اعداد اعشاری همیشه 100 درصد دقیق نیست.
var x = 0.2 + 0.1; // x will be 0.30000000000000004
برای حل این مشکل، میتوان از ضرب و تقسیم کمک گرفت:
var x = (0.2 * 10 + 0.1 * 10) / 10; // x will be 0.3
همان طور که در بخش معرفی متغیرها گفته شد، حاصل جمع کردن یک رشته با یک عدد، یک رشته خواهد بود (عمل concatenation یا کنار هم قرار گرفتن). اما در سایر اعمال حسابی روی اعداد حتی اگر عدد به صورت رشته باشد، جاوا اسکریپت آنها را به عدد تبدیل و سپس عمل حسابی را روی آنها انجام میدهد:
var x = "100";
var y = "10";
var z = x / y; // z will be 10
NaN - Not a Number
NaN
در جاوا اسکریپت یک واژه رزرو شده است و نشان میدهد که یک عدد، یک عدد مجاز نیست.
مثلاً انجام اعمال حسابی روی یک رشته غیر عددی، نتیجه NaN
را ایجاد میکند.
var x = 100 / "Apple"; // x will be NaN (Not a Number)
میتوانید از تابع گلوبال isNaN
برای مشخص کردن آن که متغیر شما یک عدد است خیر، استفاده کنید:
var x = 100 / "Apple";
isNaN(x); // returns true because x is Not a Number
به یاد داشته باشید که نوع داده NaN
عدد است: typeof NaN
returns number
بینهایت
Infinity
(یا -Infinity
) مقداری است که جاوا اسکریپت در صورت محاسبه یک عدد بزرگتر از بزرگترین عدد ممکن، برمیگرداند.
در جاوا اسکریپت تقسیم بر صفر بینهایت را برمیگرداند:
var x = 2 / 0; // x will be Infinity
var y = -2 / 0; // y will be -Infinity
نوع داده Infinity
عدد است.
اعداد در جاوا اسکریپت در مبنای 10 هستند. ولی با استفاده از تابع شیء toString()
میتوانید عدد مورد نظر خود را از مبنای 2 تا مبنای 36 به هر مبنایی که خواستید تبدیل کنید.
var myNumber = 32;
myNumber.toString(10); // returns 32
myNumber.toString(32); // returns 10
myNumber.toString(16); // returns 20
myNumber.toString(8); // returns 40
myNumber.toString(2); // returns 100000