Rumah >hujung hadapan web >tutorial js >Panduan untuk nombor pembulatan di JavaScript
mata utama
Math.round
, Math.floor
, dan Math.ceil
. Math.trunc
bulat ke integer terdekat, Math.round
bulat, Math.floor
bulat, Math.ceil
memotong bahagian pecahan nombor. Math.trunc
Number.toFixed
kaedah untuk nombor pembulatan ke tempat perpuluhan tertentu atau nombor yang signifikan. Kaedah ini mengembalikan nombor bulat sebagai rentetan. Number.toPrecision
Math.round
, Math.floor
, dan Math.ceil
berbeza. Sebagai contoh, Math.trunc
bulat nombor negatif ke integer terkecil seterusnya, manakala Math.floor
memangkas bahagian pecahan, dengan berkesan membulatkannya ke atas. Math.trunc
Math.fround
Math.round
, Math.floor
atau Math.ceil
mungkin lebih sesuai untuk sentiasa bulat atau naik, atau untuk menangani nombor negatif. Math.trunc
atau Number.toFixed
terpakai untuk pembulatan kepada nombor perpuluhan atau ketara tertentu. Number.toPrecision
menyediakan banyak cara untuk nombor bulat kepada nilai integer. Math
, tetapi mari kita berikannya kepada beberapa pembolehubah untuk memudahkannya untuk mengendalikan: Math
<code class="language-javascript">const PI = Math.PI; const E = Math.E;</code>
Petua Pro: Anda juga boleh menggunakan pemusnahan objek untuk membuat tugasan ini dalam baris:
<code class="language-javascript">const { PI, E } = Math;</code>Sekarang kita telah menentukan pemalar ini, mari kita lihat beberapa kaedah untuk nombor pembulatan dalam JavaScript.
Math.round
. Ini adalah pilihan yang paling mudah, ia hanya mengikat nombor dengan bahagian pecahan kepada integer terdekat. Ia menggunakan peraturan berikut: Jika nombor adalah tepat di antara dua bilangan bulat, bulat. Sebagai contoh, 2.5 akan bulat sehingga 3. Math.round
<code class="language-javascript">const PI = Math.PI; const E = Math.E;</code>Jika anda ingin mengumpulkan nombor ke nilai integer terdekat,
sangat mudah. Sebagai contoh, jika anda mengira skor purata tiga ujian, tambahkan tiga skor dan bahagikannya dengan tiga. Ini mungkin tidak mendapat integer, jadi anda boleh mengundurkannya ke nilai terdekat menggunakan Math.round()
: Math.round()
<code class="language-javascript">const { PI, E } = Math;</code>nombor pembulatan menggunakan
Math.floor
. Ini selalu mengelilingi nilai ke integer di bawah (nama bermaksud nombor ditolak ke "lantai"): Math.floor
<code class="language-javascript">Math.round(2.3); // 因为更接近2,所以向下舍入 Math.round(2.921); // 因为更接近3,所以向上舍入 Math.round(2.5); // 因为正好位于中间,所以向上舍入 Math.round(PI); Math.round(E);</code>
adalah untuk membuat bilangan bulat rawak. Bulat memastikan bahawa integer bermula dari sifar dan setiap integer mempunyai peluang yang sama untuk dikembalikan. Bermula dari sifar sering berguna kerana array dalam JavaScript adalah sifar-diindeks, jadi bulat ke bawah akan memastikan bahawa elemen pertama dalam array boleh dipilih. Contoh berikut menunjukkan cara memilih elemen rawak dari array menggunakan Math.floor
: Math.floor
<code class="language-javascript">const test1 = 86; const test2 = 93; const test3 = 95; const average = Math.round((test1 + test2 + test3) / 3);</code>Kod di atas menggunakan
membundarkan untuk memastikan bahawa indeks antara 0 dan 4 dikembalikan, jadi setiap elemen dalam array mempunyai peluang yang sama untuk dipilih. Math.floor
Math.ceil
. Nama ini berasal dari "siling", yang, bertentangan dengan "lantai", bermakna nilai itu meningkat. Kaedah ini berfungsi dengan cara yang sama seperti semua kaedah lain. Cukup berikan nombor yang anda mahu bulat sebagai parameter: Math.ceil
<code class="language-javascript">Math.floor(2.3); // 向下舍入到2 Math.floor(2.921); // 向下舍入到2 Math.floor(2.5); // 向下舍入到2 Math.floor(PI); Math.floor(E);</code>Tetapi bilakah anda perlu mengumpulkan nombor? Penggunaan biasa adalah jika anda perlu mengira berapa banyak bekas yang anda perlukan untuk memegang sesuatu. Sebagai contoh, katakan anda mempunyai laman web muzik yang mengandungi senarai main, setiap senarai main mengandungi sepuluh lagu. Jika seseorang memuat naik 82 lagu, anda perlu memikirkan berapa banyak senarai main yang anda mahu buat. Ini dilakukan dengan membahagikan bilangan lagu sebanyak 10 (bilangan lagu dalam setiap senarai main):
<code class="language-javascript">const fruit = ["?", "?", "?", "?", "?"]; const randomFruit = fruit[Math.floor(Math.random() * fruit.length)];</code>Menggunakan
akan mengundurkannya ke 8 ... Walau bagaimanapun, kami tidak akan membuat senarai main untuk dua lagu terakhir! Dalam kes ini kita sentiasa perlu bulat supaya kita dapat menyediakan bekas tambahan untuk mana -mana baki: Math.round
<code class="language-javascript">Math.ceil(2.3); // 向上舍入到3 Math.ceil(2.921); // 向上舍入到3 Math.ceil(2.5); // 向上舍入到3 Math.ceil(PI); Math.ceil(E);</code>nombor pembulatan menggunakan
Math.trunc
. Sebenarnya, ini bukan fungsi pembulatan; Ia pada dasarnya hanya memadamkan bahagian perpuluhan nombor, hanya meninggalkan bahagian integer, seperti yang ditunjukkan dalam contoh berikut: Math.trunc
<code class="language-javascript">const PI = Math.PI; const E = Math.E;</code>
pada pandangan pertama, Math.trunc
nampaknya sama seperti Math.floor
; Walau bagaimanapun, apabila nilai negatif disediakan sebagai parameter, kedua -dua kaedah berkelakuan berbeza, seperti yang ditunjukkan dalam contoh berikut:
<code class="language-javascript">const { PI, E } = Math;</code>Perbezaannya berlaku kerana apabila menggunakan
untuk mengelilingi nombor negatif, ia turun ke integer terkecil seterusnya, dan memotong nilai negatif bersamaan dengan membulatkannya ke atas. Math.floor
mengembalikan nilai yang sama seperti Math.ceil
: Math.trunc
<code class="language-javascript">Math.round(2.3); // 因为更接近2,所以向下舍入 Math.round(2.921); // 因为更接近3,所以向上舍入 Math.round(2.5); // 因为正好位于中间,所以向上舍入 Math.round(PI); Math.round(E);</code>Semua kaedah ini sangat berguna, tetapi mereka mempunyai batasan bahawa mereka sentiasa mengembalikan nilai integer. Bagaimana jika kita mahu bulat nombor ke perpuluhan tertentu atau jumlah yang signifikan?
nombor bulat ke tempat perpuluhan di JavaScript
akan mengelilingi nombor ke integer terdekat. Malangnya, objek Math.round
tidak memberikan apa -apa cara untuk nombor bulat ke tempat perpuluhan tertentu dengan ketepatan yang lebih tepat. Nasib baik, jenis Math
mempunyai beberapa cara terbina dalam untuk melakukan ini. Mari kita lihat mereka. Number
Number.toFixed
Satu perkara yang perlu diperhatikan ialah nilai ini dikembalikan sebagai rentetan
<code class="language-javascript">const test1 = 86; const test2 = 93; const test3 = 95; const average = Math.round((test1 + test2 + test3) / 3);</code>
. Anda boleh menyelesaikan masalah ini dengan membungkus panggilan kaedah dalam fungsi , yang menukarkan hasilnya kembali kepada nombor:
Number
<code class="language-javascript">Math.floor(2.3); // 向下舍入到2 Math.floor(2.921); // 向下舍入到2 Math.floor(2.5); // 向下舍入到2 Math.floor(PI); Math.floor(E);</code>
Anda tidak boleh memanggil kaedah pada bilangan bulat menggunakan satu titik, kerana tidak jelas sama ada titik adalah pengendali panggilan kaedah atau titik perpuluhan. Untuk membetulkannya, anda boleh meletakkan bilangan bulat dalam kurungan atau menggunakan dua titik untuk dengan jelas menunjukkan bahawa anda memanggil kaedah dan bukannya menulis literal angka dengan titik perpuluhan:
<code class="language-javascript">const fruit = ["?", "?", "?", "?", "?"]; const randomFruit = fruit[Math.floor(Math.random() * fruit.length)];</code>
Jika tiada hujah disediakan, nombor akan dibulatkan ke integer terdekat (tetapi dikembalikan sebagai rentetan):
<code class="language-javascript">Math.ceil(2.3); // 向上舍入到3 Math.ceil(2.921); // 向上舍入到3 Math.ceil(2.5); // 向上舍入到3 Math.ceil(PI); Math.ceil(E);</code>
Kes penggunaan biasa untuk pembulatan ke beberapa tempat perpuluhan yang ditetapkan adalah berurusan dengan mata wang -contohnya, jika anda ingin menawarkan harga sesuatu dalam dolar terdekat ke sen. Katakan anda mempunyai laman web e-dagang dengan promosi yang sedang berjalan dan anda boleh mendapatkan diskaun 15% pada mana-mana item dalam keranjang belanja anda. Sebelum memaparkan harga diskaun, mungkin perlu untuk mengelilingi:
<code class="language-javascript">const songsPerPlaylist = 10; const numberOfSongs = 82; const numberOfPlaylists = numberOfSongs / songsPerPlaylist;</code>
Ini boleh dengan mudah diperbaiki menggunakan
<code class="language-javascript">const numberOfPlaylists = Math.ceil(numberOfSongs / songsPerPlaylist);</code>:
Number.toFixed
<code class="language-javascript">Math.trunc(2.3); // 只留下2 Math.trunc(2.921); // 只留下2,即使它更接近3 Math.trunc(2.5); // 只留下2 Math.trunc(PI); Math.trunc(E);</code>NOTA: Untuk maklumat lanjut mengenai isu -isu
yang mungkin anda miliki, lihat nombor (). Jika anda memerlukan peringatan cepat nombor yang sah, ia pada asasnya hanya menggunakan nombor bukan sifar pertama. Untuk jumlah yang besar, jawapan terakhir juga akan diisi dengan sifar. Sebagai contoh, nombor 53,863 bulat kepada dua digit penting akan menjadi 54,000. Ini kerana 5 dan 3 adalah dua nombor bukan sifar pertama, dan sejak nombor seterusnya adalah 8, ia bulat ke atas. Kita perlu menambah sifar pada akhir untuk memastikan nilai bulat adalah penghampiran yang munasabah bagi nombor asal. anda boleh melengkapkan perpuluhan dengan cara yang sama. Sebagai contoh, 0.00000623978 akan bulat ke 0.0000062 kepada dua digit penting, kerana 6 dan 2 adalah dua nombor bukan sifar pertama, dan sejak digit seterusnya adalah 3, ia bulat. Untuk menggunakan kaedah ini, hanya panggilnya pada nombor dan berikan bilangan nombor yang signifikan sebagai argumen (ingat, bilangan bulat perlu diletakkan dalam kurungan sebelum memanggilnya): Perhatikan bahawa semua nilai dikembalikan sebagai rentetan dan boleh digunakan dengan notasi eksponen -contohnya "5.4E 4" dan bukannya "54000". Seperti yang disebutkan sebelumnya, kita dapat memastikan bahawa nombor dikembalikan dengan membungkus panggilan kaedah dalam fungsi Penggunaan umum pembulatan kepada jumlah yang ketara adalah apabila anda bekerja dengan jumlah yang besar dan tidak pasti berapa besar mereka. Sebagai contoh, katakan anda ingin melaporkan bilangan kali jawatan terkini adalah "disukai", adakah anda mengundurkannya ke 10, 100, atau 1000 terdekat? Untuk beberapa tahap, ia bergantung kepada bagaimana popularnya; Penyelesaiannya adalah untuk mengelilingi jumlah yang signifikan: Terdapat beberapa perkara yang perlu diperhatikan semasa nombor pembulatan dalam JavaScript (atau mana -mana bahasa pengaturcaraan). Seperti yang anda ketahui, komputer menyimpan semua data (termasuk nombor) sebagai perwakilan binari. JavaScript menyimpan nombor sebagai nilai binari ketepatan tunggal 32-bit. Salah satu masalah dengan melakukan ini ialah beberapa nombor perpuluhan tidak dapat diwakili dengan tepat dalam binari. Ini biasanya tidak menimbulkan masalah, tetapi ia membawa kepada beberapa hasil yang pelik, seperti: Ini kerana 0.1 dan 0.2 tidak boleh diwakili dengan tepat dalam binari dan menghasilkan sedikit kesilapan apabila menambahkannya bersama -sama. menunjukkan kepada kami nombor terdekat yang boleh diwakili: seperti yang anda lihat, ia sangat dekat dengan 0.1, tetapi sangat sedikit lebih tinggi. Dalam kes -kes yang paling praktikal ini tidak menimbulkan masalah, tetapi kadang -kadang menyebabkan tingkah laku yang pelik apabila anda cuba mengelilingi beberapa nombor: Ini berlaku kerana perpuluhan 3.55 tidak boleh menggunakan perwakilan tepat 32-bit. Kita boleh menggunakan seperti yang anda lihat, ia sebenarnya diwakili oleh nombor titik terapung 3.549999952316284, yang turun ke 3.5. Masalah ini dengan nombor pembulatan di JavaScript tidak sering berlaku, tetapi anda pasti perlu memberi perhatian kepada isu -isu ini jika anda melakukan banyak pembulatan, terutama jika hasilnya tepat. Dengan semua kaedah pembulatan yang diterangkan dalam artikel ini, anda boleh meminta kaedah mana yang terbaik. Jawapannya selalu "bergantung". Jika anda hanya ingin mengumpulkan nombor ke integer terdekat, anda tidak akan salah dengan Jika anda perlu bulat ke nombor perpuluhan atau jumlah yang diberikan, anda mesti menggunakan Anda dapat melihat semua jenis contoh pembulatan yang diterangkan dalam artikel ini dalam demonstrasi Codepen di bawah. Dengan semua kaedah yang berbeza ini, anda tidak sepatutnya mempunyai sebarang masalah dengan nombor pembulatan pada masa akan datang. Jika anda mendapati artikel ini berguna, anda mungkin juga suka: untuk mengelilingi nombor ke integer terdekat. Sebagai contoh, , . Sebagai contoh, Bolehkah saya menggunakan Adakah ralat pembulatan yang berlaku di JavaScript? Ya, kesilapan pembulatan mungkin berlaku disebabkan oleh cara operasi titik terapung berfungsi di komputer anda. Adalah penting untuk memberi perhatian kepada isu -isu ketepatan yang berpotensi, terutamanya apabila berurusan dengan nombor yang sangat besar atau sangat kecil. Dalam kes ini, pertimbangkan untuk menggunakan perpustakaan seperti decimal.js untuk operasi aritmetik yang lebih tepat. toFixed()
pusingan ke tempat perpuluhan menggunakan
Kaedah Number.toPrecision
Number.toPrecision
berfungsi sama dengan kaedah Number.toFixed
, tetapi ia melengkapkan nombor kepada bilangan tetap yang signifikan. <code class="language-javascript">const PI = Math.PI;
const E = Math.E;</code>
Number
: <code class="language-javascript">const { PI, E } = Math;</code>
<code class="language-javascript">Math.round(2.3); // 因为更接近2,所以向下舍入
Math.round(2.921); // 因为更接近3,所以向上舍入
Math.round(2.5); // 因为正好位于中间,所以向上舍入
Math.round(PI);
Math.round(E);</code>
isu nombor pembulatan dalam JavaScript
<code class="language-javascript">const test1 = 86;
const test2 = 93;
const test3 = 95;
const average = Math.round((test1 + test2 + test3) / 3);</code>
Math
mempunyai kaedah lain yang dipanggil fround
yang mengembalikan nombor terdekat yang boleh diwakili menggunakan 32-bit. Sebagai contoh, 0.6125 boleh dinyatakan dengan tepat sebagai binari 0.101, jadi ini akan mengembalikan nilai yang sama: <code class="language-javascript">Math.floor(2.3); // 向下舍入到2
Math.floor(2.921); // 向下舍入到2
Math.floor(2.5); // 向下舍入到2
Math.floor(PI);
Math.floor(E);</code>
Math.fround
<code class="language-javascript">const PI = Math.PI;
const E = Math.E;</code>
<code class="language-javascript">const { PI, E } = Math;</code>
Math.fround
untuk melihat bagaimana ia sebenarnya mewakilinya: <code class="language-javascript">Math.round(2.3); // 因为更接近2,所以向下舍入
Math.round(2.921); // 因为更接近3,所以向上舍入
Math.round(2.5); // 因为正好位于中间,所以向上舍入
Math.round(PI);
Math.round(E);</code>
Kaedah apa yang harus saya gunakan untuk nombor bulat?
Math.round
, tetapi jika anda selalu ingin bulat atau naik, tanpa mengira bahagian pecahan, anda juga harus mempertimbangkan menggunakan Math.floor
atau Math.ceil
. Jika anda juga merancang untuk mengelilingi nombor negatif, pertimbangkan untuk menggunakan Math.trunc
sebaliknya. Number.toFixed
atau Number.toPrecision
. Tetapi sila ambil perhatian bahawa kedua -dua kaedah dipanggil oleh nombor dan mengembalikan rentetan.
Soalan Lazim Mengenai Nombor Pembulatan dalam JavaScript
Bagaimana untuk membulatkan nombor kepada bilangan bulat terdekat dalam JavaScript? Anda boleh menggunakan fungsi
Math.round()
akan mendapat 3 dan Math.round(3.14)
akan mendapat 5. Math.round(4.76)
Apakah perbezaan antara Math.round()
dan Math.floor()
? Math.ceil()
bulat ke integer terdekat, Math.round()
bulat ke integer terdekat, Math.floor()
bulat ke integer terdekat. Math.ceil()
toFixed()
akan mendapat 3.14. let roundedNumber = 3.14159.toFixed(2)
Math.round()
Bagaimana menangani nombor dengan bahagian perpuluhan .5? Math.round()
Gunakan logik "bulat", yang bermaksud bahawa apabila bahagian pecahan adalah tepat .5, ia bulat ke integer yang paling dekat. Sebagai contoh, hasil Math.round(2.5)
adalah 2 dan hasil Math.round(3.5)
adalah 4. Math.round()
untuk bulat nombor positif dan negatif? Ya, Math.round()
berfungsi dengan nombor positif dan negatif. Ia bulat nombor positif seperti biasa dan bulat nombor negatif kepada sifar.
Atas ialah kandungan terperinci Panduan untuk nombor pembulatan di JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!