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