با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، در بخش های قبلی مباحث مربوطه به رشته ها در جاوااسکریپت ، ساختارها و متدهای کار با آن را بررسی کردیم، همانطور که می دانیم رشته ها و اعداد مهمترین انواع داده و محتوای صفحات وب می باشند که ترکیب آن ها متن محتوای صفحات وب را می سازد،پس در این بخش قصد داریم که به مباحث مربوط به چگونگی کار با اعداد در جاوا اسکریپت بپردازیم.
در این آموزش شما با چگونگی کار با اعداد در جاوااسکریپت و فرمت های مختلف عددی در عملیات ریاضی آشنا خواهید شد.
در جاوااسکریپت اعداد را فقط می توان در فرمت دهدهی یا بدون آن نوشت.
1 2 | var x = 3.14; // A number with decimals var y = 3; // A number without decimals |
همچنین می توانید اعداد را با حروف عملی نیز بنویسید.
بر خلاف بسیاری از زبان های برنامه نویسی دیگر، جاوا اسکریپت انواع مختلفی از اعداد مانند اعداد صحیح، اعشاری و…را تعریف نمی کند.
اعداد جاوا اسکریپت همیشه به عنوان نقطه دقت مضاعف با توجه به استاندارد بین المللی IEEE 754 ذخیره می شوند.
این فرمت اعداد را در ۶۴ بیت ذخیره می کند، جایی که عدد (کسری) در بیت های ۰ تا ۵۱ ذخیره می شود.
نمایش در بیت های ۵۲ تا ۶۲ و علامت در بیت ۶۳:
Value (aka Fraction/Mantissa) | Exponent | Sign |
---|---|---|
۵۲ bits (0 – 51) | ۱۱ bits (52 – 62) | ۱ bit (63) |
Integer ها (اعدادی بدون علامت یا نماد) با دقت بالا تا ۱۵ رقم پشتیبانی می شوند :
1 2 | var x = 999999999999999; // x will be 999999999999999 var y = 9999999999999999; // y will be 10000000000000000 |
حداکثر تعداد ارقام دهدهی ۱۷ است، اما محاسبات اعشاری همیشه ۱۰۰٪ دقیق نیست:
برای حل مشکل فوق، می توانید از ضرب و تقسیم زیر استفاده کنید:
جاوااسکریپت از عملگر + برای عملیات جمع و پیوند بین دو نوع مقدار استفاده می کند.
استفاده از + بین رشته یا متغیر و نوع اعداد آن ها را با هم ترکیب می کند.
نتیجه ی جمع دو عدد از نوع رشته ای:
اجتماع بین اعداد و رشته ها :
نتیجه جمع بین یک عدد و رشته ، یک رشته خواهد بود:
اشتباه رایج مثال زیر، این است که انتظار می رود نتیجه ی آن ۳۰ باشد :
در مثال زیر نیز اشتباه رایج این است که گمان می رود نتیجه ۱۰۲۰۳۰ باشد :
1 2 3 4 | var x = 10; var y = 20; var z = "30"; var result = x + y + z; |
تشریح مثال فوق:
کامپایلر جاوا اسکریپت از چپ به راست محاسبه می کند.
ابتدا ۱۰ + ۲۰ اضافه می شود زیرا x و y هر دو عدد هستند.
سپس ۳۰ + “۳۰” پیوند می شود زیرا z یک رشته است.
رشته ها در جاوااسکریپت می توانند شامل محتوای عددی باشند.
1 2 3 | var x = 100; var y = "100"; |
جاوااسکریپت در تمام عملیات ریاضی رشته ها را به عدد تبدیل می کند :
به مثال مشابه زیر نیز توجه کنید:
نتیجه ی مثال زیر نیز مشابه فوق خواهد بود :
اما مثال زیر مانند موارد فوق، کار نمی کند :
در مثال فوق، جاوااسکریپت از + برای پیوند و ترکیب دو رشته استفاده می کند.
NaN یک واژه ذخیره شده در جاوا اسکریپت است که نشان می دهد که عدد جاری یک عدد قانونی نیست.
تلاش برای انجام محاسبات با یک رشته ی غیر عددی نتیجه NaN (نه یک عدد) را دارد:
اگر رشته شامل یک مقدار عددی باشد، نتیجه نیز عدد خواهد بود :
شما می توانید از تابع جاوااسکریپت ()isNaN برای بررسی عدد بودن یک مقدار استفاده کنید :
مراقب NaN باشید. اگر از یک NaN در یک عملیات ریاضی استفاده می کنید، نتیجه نیز NaN خواهد بود:
یا نتیجه ممکن است یک پیوند باشد:
NaN یک عدد است : typeof NaN عدد برمی گرداند:
بی نهایت (یا Infinity) یک مقدار جاوا اسکریپت است که اگر شما یک عدد خارج از بزرگترین تعداد ممکن را محاسبه کنید، رخ می دهد.
1 2 3 4 | var myNumber = 2; while (myNumber != Infinity) { // Execute until Infinity myNumber = myNumber * myNumber; } |
تقسیم بر صفر، نتیجه ی بی نهایت دارد :
بی نهایت یک عدد است : typeof بی نهایت تعداد را باز می کند.
جاوا اسکریپت، ثابت های عددی را به صورت هگزادسیمال تفسیر می کند اگر قبل از آن ۰x باشد.
نکته : برخی از مقادیر جاوا اسکریپت، اعداد را به عنوان اکتان در نظر می گیرند البته اگر با صفر پیشین نوشته شده باشند.
به طور پیش فرض، جاوا اسکریپت تعداد اعداد را به صورت مبنای ۱۰ رقمی نشان می دهد.
اما شما می توانید از متد () toString برای خروج از اعداد از مبنای ۲ به مبنای ۳۶ استفاده کنید.
هگزادسیمال مبنای ۱۶ است. دهدهی مبنای ۱۰٫ اکتال مبنای ۸٫ باینری مبنای ۲ است.
1 2 3 4 5 6 | 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 |
به طور معمول اعداد جاوااسکریپت ارزشهای ابتدایی ایجاد شده از literals هستند:
var x = 123;
اما اعداد همچنین می توانند به عنوان اشیایی با کلمه کلیدی جدید تعریف شوند:
(var y = new Number(123;
1 2 3 4 5 | var x = 123; var y = new Number(123); // typeof x returns number // typeof y returns object |
آبجکت هایی از نوع عددی سرعت اجرا را کاهش می دهد.
همچنین کلید واژه new کد را پیچیده می کند. این می تواند نتایجی غیر منتظره ای ایجاد کند:
از عملگر == برای مقایسه ی اعداد استفاده می شود:
هنگام استفاده از عملگر ===، عددهای برابر برابر نیستند، زیرا عملگر === انتظار دارد که برابری را در هر دو نوع و مقدار انتظار داشته باشد.
یا حتی اشیاء هم قابل مقایسه نیستند :
اعداد از مهم ترین نوع داده ها در هر یک از زبان های برنامه نویسی و اسکریپت های جاوااسکریپت است، که هر زبان ساختارها و متدهایی را برای کار با انواع عددی در نظر گرفته است، در این بخش نیز ما ساختار و فرمت های کار با اعداد در جاوااسکریپت را بررسی کردیم.
مانی
سلام وقت بخیر
یک سوال داشتم
روش محاسبه عملیات % در جاواسکریپت به چه صورت هست من هرجا خوندم نوشته باقی مانده تقسیم عدد سحیح اما متوجه نشدم به چه صورت محاسبه رو انجام میده
مثلا من اگر مقدار
۳۳%۱۰
رو بدم جوابی که برای من نمایش میده عدد ۳ هست
اما اگر مقدار
۳۳%۱۲
رو بدم مقدار ۹ رو نمایش میده
یا اگر مقدار
۸%۲
رو بدم ۰ نمایش میده
ممنونم میشم راهنمایی کنید که روش محاسبه چطور هست یعنی میاد عدد اول رو تقسیم بر ۱۰۰ میکنه بعد ضرب میکنه یا نمیدونم
پی وی لرن
سلام
درصد به اینصورت محاسبه می شود مثلا ۳۳%۱۰
می شود ۳۳*۱۰ تقسیم بر ۱۰۰ = ۳٫۳
مانی
ممنونم از پاسگویی شما
اما یک مشکلی هست
مثلا من الان اگر مقدار
۳۳%۱۵ رو بدم جوابی که به من میده عدد ۳ هست درصورتی که اگر به این روش محاسبه بشه جواب فرق داره
۳۳ ضربدر ۱۵ تقسیم بر ۱۰۰ = ۴٫۹۵
یا
۳۳ ضربدر ۱۲ تقسیم بر ۱۰۰ = ۳٫۹۶
درصورتی که جوابی که چاپ میشه عدد ۹ هست
پی وی لرن
سلام
می بخشید در سوالتان گفتین تقسیم بر صد می شود فکر کردم منظورتان درصد می باشد ولی این بخش که شما می خواهید مربوط به باقی مانده یا mode هستش خوب به اینصورت است که مثلا ۱۲%۳۳ به اینصورت است که اگر ۳۳/۱۲ =۲٫۷۵ می شود و چون باقیمانده عدد صحیح باشد ۲ در نظر می گیریم و ۷۵ را حذف می کنیم و می توانیم به این شکل (۲*۱۲)-۳۳ باقیمانده را بدست آوریم.
۳۳%۱۲
———————-
۱۲ % ۳۳ = ۲٫۷۵
(۲*۱۲) – ۳۳ = ۹
۳۳%۱۵
———————-
(( ۱۵ / ۳۳) * ۱۵) – ۳۳ = ۳
مانی
بسیار عالی ممنونم از توضیح دقیقتون الان متوجه شدم که چطور میشه این عدد ها بدست میاد
واقعا محاسبه عجیبی رو انجام میده و هم جالب هم پیچیده