Rumah >hujung hadapan web >tutorial js >Panduan untuk nombor pembulatan di JavaScript

Panduan untuk nombor pembulatan di JavaScript

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-09 11:32:10581semak imbas

A Guide to Rounding Numbers in JavaScript

Artikel ini meneroka pelbagai kaedah pembulatan nombor dalam JavaScript, termasuk menggunakan fungsi matematik JavaScript dan kaedah lain untuk membulatkan ke tempat perpuluhan. Kami juga akan memperkenalkan isu -isu yang perlu diberi perhatian apabila nombor pembulatan.

mata utama

    JavaScript menyediakan beberapa cara untuk nombor bulat, termasuk
  • , 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
  • JavaScript menyediakan
  • dan Number.toFixed kaedah untuk nombor pembulatan ke tempat perpuluhan tertentu atau nombor yang signifikan. Kaedah ini mengembalikan nombor bulat sebagai rentetan. Number.toPrecision
  • Apabila berurusan dengan nombor negatif, tingkah laku
  • , 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
  • Kerana perwakilan binari nombor, isu ketepatan mungkin berlaku dalam JavaScript. Sesetengah nombor perpuluhan tidak boleh diwakili dengan tepat dalam binari, mengakibatkan kesilapan pembulatan. Kaedah
  • boleh digunakan untuk mencari bilangan 32 bit yang paling dekat. Math.fround
  • Pemilihan kaedah pembulatan bergantung kepada kes penggunaan tertentu.
  • adalah pilihan umum yang baik untuk membulatkan ke integer terdekat, tetapi 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
JavaScript Rounding

Apabila memproses nilai angka, kadang -kadang kita melakukan pengiraan yang akhirnya menghasilkan bahagian pecahan yang perlu dibulatkan kepada bilangan bulat -contohnya, apabila anda mengira harga purata atau memproses nombor rawak. Nasib baik, objek JavaScript

menyediakan banyak cara untuk nombor bulat kepada nilai integer. Math

Dalam contoh kami, kami akan menunjukkan pelbagai jenis pembulatan menggunakan dua pemalar matematik yang paling penting: π (nisbah perimeter bulatan ke diameternya) dan E (asas logaritma semulajadi, juga dikenali sebagai "nombor euler "). Kedua -dua nilai itu adalah sifat objek

, 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.

nombor bulat dalam javascript menggunakan Math.round

Kaedah pertama yang akan kita lihat ialah

. 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

Untuk menggunakan kaedah ini, kita hanya perlu memberikan nombor yang akan dibulatkan sebagai parameter:

<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

Kaedah seterusnya yang akan kita lihat ialah

. Ini selalu mengelilingi nilai ke integer di bawah (nama bermaksud nombor ditolak ke "lantai"): Math.floor

Penggunaan umum
<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

nombor pembulatan menggunakan

Math.ceil

Bercakap tentang pembulatan ke atas, inilah yang dilakukan oleh

. 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

Kaedah seterusnya yang akan kita lihat ialah

. 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

Apabila parameter negatif,

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

kita telah melihat bahawa

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

pusingan ke tempat perpuluhan menggunakan

Number.toFixed

Ini adalah kaedah angka, yang bermaksud ia dipanggil oleh nombor itu sendiri. Ia melengkapkan nombor perpuluhan ke nombor perpuluhan yang diberikan, yang disediakan sebagai parameter:

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

Juga nota: Jika anda cuba menggunakan kaedah ini untuk nombor yang sudah menjadi integer, anda akan mendapat ralat jika anda memanggil kaedah hanya menggunakan satu titik:
<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 (). toFixed()

pusingan ke tempat perpuluhan menggunakan Number.toPrecision

Kaedah

Number.toPrecision berfungsi sama dengan kaedah Number.toFixed, tetapi ia melengkapkan nombor kepada bilangan tetap yang signifikan.

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):

<code class="language-javascript">const PI = Math.PI;
const E = Math.E;</code>

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 Number:

<code class="language-javascript">const { PI, E } = Math;</code>

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:

<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

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:

<code class="language-javascript">const test1 = 86;
const test2 = 93;
const test3 = 95;
const average = Math.round((test1 + test2 + test3) / 3);</code>

Ini kerana 0.1 dan 0.2 tidak boleh diwakili dengan tepat dalam binari dan menghasilkan sedikit kesilapan apabila menambahkannya bersama -sama.

Objek

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>
Walau bagaimanapun, seperti yang kita lihat di atas, 0.1 tidak boleh dinyatakan dengan tepat dalam 32 bit.

menunjukkan kepada kami nombor terdekat yang boleh diwakili: Math.fround

<code class="language-javascript">const PI = Math.PI;
const E = Math.E;</code>

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:

<code class="language-javascript">const { PI, E } = Math;</code>

Ini berlaku kerana perpuluhan 3.55 tidak boleh menggunakan perwakilan tepat 32-bit. Kita boleh menggunakan 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>

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.

Kaedah apa yang harus saya gunakan untuk nombor bulat?

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 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.

Jika anda perlu bulat ke nombor perpuluhan atau jumlah yang diberikan, anda mesti menggunakan Number.toFixed atau Number.toPrecision. Tetapi sila ambil perhatian bahawa kedua -dua kaedah dipanggil oleh nombor dan mengembalikan rentetan.

Anda dapat melihat semua jenis contoh pembulatan yang diterangkan dalam artikel ini dalam demonstrasi Codepen di bawah.

pautan demo codepen

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:

  • berita menarik digital JavaScript
  • petua cepat: Cara menukar nombor ke nombor ordinal dalam javascript

Soalan Lazim Mengenai Nombor Pembulatan dalam JavaScript

Bagaimana untuk membulatkan nombor kepada bilangan bulat terdekat dalam JavaScript? Anda boleh menggunakan fungsi

untuk mengelilingi nombor ke integer terdekat. Sebagai contoh, 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()

Bolehkah saya mengikat nombor ke nombor perpuluhan tertentu? Ya, anda boleh bulat nombor ke tempat perpuluhan tertentu menggunakan kaedah

. Sebagai contoh, 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.

Bolehkah saya menggunakan 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.

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.

Atas ialah kandungan terperinci Panduan untuk nombor pembulatan di JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn