۱۲ اکتبر ۲۰۲۲

اعداد

در جاوااسکریپت، دو نوع عدد وجود دارد:

  1. اعداد معمولی در جاوااسکریپت با فرمت 64 بیتی IEEE-754 ذخیره می‌شوند، همچنین با “اعداد اعشاری با دقت یک صدم” هم شناخته می‌شوند. ما اکثر اوقات از این اعداد استفاده می‌کنیم، و درباره آنها در این فصل صحبت خواهیم کرد.

  2. اعداد BigInt، برای نمایش اعدادی با طول دلخواه استفاده می‌شوند. آنها بعضی اوقات مورد نیاز هستند، چون اعداد معمولی نمی‌توانند از 253 بیشتر یا از -253 کمتر باشند. چون bigintها در چند حوزه خاص استفاده می‌شوند، ما به آنها یک فصل خاص BigInt اختصاص می‌دهیم.

پس اینجا درباره اعداد معمولی صحبت می‌کنیم. بیایید دانش‌مان درباره آنها را گسترش دهیم.

راه‌های دیگر نوشتن یک عدد

فرض کنید نیاز داریم بنویسیم یک میلیارد. راه واضح این است:

let billion = 1000000000;

همچنین ما می‌توانیم از خط تیره _ به عنوان جداکننده استفاده کنیم:

let billion = 1_000_000_000;

اینجا خط تیره _ نقش “syntactic sugar” را بازی می‌کند، و عدد را خواناتر می‌کند. موتور جاوااسکریپت به راحتی _ بین ارقام را نادیده می‌گیرد، پس دقیقا عددی مانند یک میلیارد بالا است.

اما در زندگی واقعی ما عموما از نوشتن رشته حرف با تعداد زیاد صفر خودداری میکنیم به خاطر اینکه به راحتی ممکن است خطا داشته باشیم و اشتباه بنویسیم. همینطور، ما تنبل هستیم! ما معمولا یه چیزی شبیه “1bn” مینویسیم به جای یک میلیارد یا “7.3bn” برای هفت میلیارد و سیصد میلیون. این حقیقت برای اکثر اعداد بزرگ هم صحیح است.

در جاوااسکریپت، ما یک عدد را براساس اضافه کردن حرف "e" به انتهای آن خلاصه می‌کنیم و با آن تعداد صفرها مشخص می‌شود.

let billion = 1e9;  // 1 billion, literally: 1 and 9 zeroes

alert( 7.3e9 );  // 7.3 billions (same as 7300000000 or 7_300_000_000)

به زبانی دیگر، "e" عدد را در 1 با تعداد صفر داده شده ضرب می‌کند.

1e3 === 1 * 1000; // e3 یعنی *1000
1.23e6 === 1.23 * 1000000; // e6 یعنی *1000000

حالا بگذارید مقداری خیلی کوچک بنویسیم. مثلا؛ یک میکروثانیه، (یک میلیونیوم ثانیه):

let mсs = 0.000001;

دقیقا مثل قبل، استفاده از "e" می‌تواند کمک کند. اگر ما بخواهیم که از نوشتن صفرها خودداری کنیم، می‌توانیم بنویسیم:

let mcs = 1e-6; // پنج صفر در سمت چپ ۱

اگر ما تعداد صفرهای 0.000001 را بشماریم، شش تا از آنها موجودست. بنابراین طبعا می‌شود 1e-6.

به زبانی دیگر، یک عدد منفی بعد "e"، به معنی تقسیم بر یک با تعداد صفرهای داده شده است.

// -3 divides by 1 with 3 zeroes
1e-3 === 1 / 1000; // 0.001

// -6 divides by 1 with 6 zeroes
1.23e-6 === 1.23 / 1000000; // 0.00000123

// مثالی با یک عدد بزرگتر
1234e-2 === 1234 / 100; // ممیز دو بار حرکت می‌کند، 12.34

اعداد پایه ۱۶، دودویی، پایه ۸

اعداد پایه ۱۶ برای نمایش رنگ‌ها، کدگذاری حروف و بسیاری دیگر، به طور وسیعی در جاوااسکریپت مورد استفاده قرار می‌گیرند. بنابراین، یک راه کوتاهتری برای نوشت آنها وجود دارد: 0x و سپس عدد.

به عنوان مثال: