国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
關(guān)鍵要點
JavaScript舍入
使用Math.round在JavaScript中舍入數(shù)字
使用Math.floor舍入數(shù)字
使用Math.ceil舍入數(shù)字
使用Math.trunc舍入數(shù)字
在JavaScript中將數(shù)字舍入到小數(shù)位
使用Number.toFixed舍入到小數(shù)位
使用Number.toPrecision舍入到小數(shù)位
JavaScript中舍入數(shù)字的問題
我應(yīng)該使用哪些舍入數(shù)字的方法?
關(guān)於在JavaScript中舍入數(shù)字的常見問題解答
首頁 web前端 js教程 JavaScript中舍入數(shù)字的指南

JavaScript中舍入數(shù)字的指南

Feb 09, 2025 am 11:32 AM

A Guide to Rounding Numbers in JavaScript

本文探討JavaScript中各種數(shù)字舍入方法,包括使用JavaScript數(shù)學(xué)函數(shù)和其他舍入到小數(shù)位的方法。我們還將介紹舍入數(shù)字時需要注意的問題。

關(guān)鍵要點

  • JavaScript提供了幾種舍入數(shù)字的方法,包括Math.round、Math.floorMath.ceilMath.trunc。 Math.round舍入到最接近的整數(shù),Math.floor向下舍入,Math.ceil向上舍入,Math.trunc截斷數(shù)字的小數(shù)部分。
  • 對於將數(shù)字舍入到特定的小數(shù)位數(shù)或有效數(shù)字,JavaScript提供Number.toFixedNumber.toPrecision方法。這些方法將舍入後的數(shù)字作為字符串返回。
  • 在處理負數(shù)時,Math.round、Math.floorMath.ceilMath.trunc的行為有所不同。例如,Math.floor將負數(shù)向下舍入到下一個最小的整數(shù),而Math.trunc截斷小數(shù)部分,有效地將其向上舍入。
  • 由於數(shù)字的二進製表示,JavaScript中可能會出現(xiàn)精度問題。某些十進制數(shù)無法在二進制中精確表示,從而導(dǎo)致舍入誤差。 Math.fround方法可用於查找32位中最接近的可表示數(shù)字。
  • 舍入方法的選擇取決於具體的用例。 Math.round是捨入到最接近整數(shù)的良好通用選擇,但Math.floorMath.ceilMath.trunc可能更適合始終向下或向上舍入,或處理負數(shù)。 Number.toFixedNumber.toPrecision應(yīng)用於舍入到特定的小數(shù)位數(shù)或有效數(shù)字。

JavaScript舍入

在處理數(shù)值時,我們有時會執(zhí)行計算,這些計算最終會產(chǎn)生需要捨入到整數(shù)的小數(shù)部分——例如,當(dāng)您計算平均價格或處理隨機數(shù)時。幸運的是,JavaScript的Math對象提供了許多將數(shù)字舍入到整數(shù)值的方法。

在我們的示例中,我們將使用兩個最重要的數(shù)學(xué)常數(shù)來演示不同類型的捨入:π(圓的周長與其直徑之比)和e(自然對數(shù)的底數(shù),也稱為“歐拉數(shù)”)。這兩個值都是Math對象的屬性,但讓我們將它們賦值給一些變量,以便更容易處理:

const PI = Math.PI;
const E = Math.E;

專業(yè)提示:您還可以使用對象解構(gòu)在一行中進行此賦值:

const { PI, E } = Math;

現(xiàn)在我們已經(jīng)定義了這些常數(shù),讓我們來看一下JavaScript中一些舍入數(shù)字的方法。

使用Math.round在JavaScript中舍入數(shù)字

我們將要查看的第一個方法是Math.round。這是最直接的選擇,它只是將任何帶有小數(shù)部分的數(shù)字舍入到最接近的整數(shù)。它使用以下規(guī)則:如果一個數(shù)字正好位於兩個整數(shù)之間,則將其向上舍入。例如,2.5將向上舍入到3。

要使用此方法,我們只需提供要捨入的數(shù)字作為參數(shù):

const PI = Math.PI;
const E = Math.E;

如果您想將數(shù)字舍入到最接近的整數(shù)值,Math.round()非常方便。例如,如果您要計算三次測試的平均分數(shù),則將三個分數(shù)相加並除以三。這可能不會得到一個整數(shù),因此您可以使用Math.round()將其舍入到最接近的值:

const { PI, E } = Math;

使用Math.floor舍入數(shù)字

我們將要查看的下一個方法是Math.floor。這始終將值向下舍入到下面的整數(shù)(名稱意味著數(shù)字被向下推到“地板”):

Math.round(2.3); // 因為更接近2,所以向下舍入

Math.round(2.921); // 因為更接近3,所以向上舍入

Math.round(2.5); // 因為正好位于中間,所以向上舍入

Math.round(PI);

Math.round(E);

Math.floor的一個常見用法是創(chuàng)建隨機整數(shù)。向下舍入確保整數(shù)從零開始,並且每個整數(shù)都有相同的被返回的機會。從零開始通常很有用,因為JavaScript中的數(shù)組是零索引的,因此向下舍入將確??梢赃x擇數(shù)組中的第一個元素。下面的示例顯示瞭如何使用Math.floor從數(shù)組中選擇一個隨機元素:

const test1 = 86;
const test2 = 93;
const test3 = 95;
const average = Math.round((test1 + test2 + test3) / 3);

上面的代碼中使用Math.floor向下舍入確保返回0到4之間的索引,因此數(shù)組中的每個元素都有相同的被選擇的機會。

使用Math.ceil舍入數(shù)字

說到向上舍入,這正是Math.ceil所做的。這個名稱來自“天花板”,與“地板”相反,這意味著值正在上升。此方法的工作方式與所有其他方法相同。只需提供要向上舍入的數(shù)字作為參數(shù):

Math.floor(2.3); // 向下舍入到2

Math.floor(2.921); // 向下舍入到2

Math.floor(2.5); // 向下舍入到2

Math.floor(PI);

Math.floor(E);

但是,您何時需要向上舍入一個數(shù)字呢?一個常見的用法是,如果您需要計算需要多少個容器來容納某物。例如,假設(shè)您有一個包含播放列表的音樂網(wǎng)站,每個播放列表包含十首歌曲。如果有人上傳了82首歌曲,您需要計算出要創(chuàng)建多少個播放列表。這是通過將歌曲數(shù)量除以10(每個播放列表中的歌曲數(shù)量)來完成的:

const fruit = ["?", "?", "?", "?", "?"];

const randomFruit = fruit[Math.floor(Math.random() * fruit.length)];

使用Math.round會將其向下舍入到8……但是,我們不會為最後兩首歌曲創(chuàng)建一個播放列表!在這種情況下,我們始終需要向上舍入,以便為任何餘數(shù)提供額外的容器:

Math.ceil(2.3); // 向上舍入到3

Math.ceil(2.921); // 向上舍入到3

Math.ceil(2.5); // 向上舍入到3

Math.ceil(PI);

Math.ceil(E);

使用Math.trunc舍入數(shù)字

我們將要查看的下一個方法是Math.trunc。嚴格來說,這不是一個舍入函數(shù);它實際上是截斷提供的參數(shù)數(shù)字。它基本上只是刪除數(shù)字的小數(shù)部分,只留下整數(shù)部分,如下面的示例所示:

const PI = Math.PI;
const E = Math.E;

乍一看,Math.trunc似乎與Math.floor相同;當(dāng)然,到目前為止給出的所有示例都給出了相同的結(jié)果。但是,當(dāng)提供負值作為參數(shù)時,這兩種方法的行為有所不同,如下面的示例所示:

const { PI, E } = Math;

差異發(fā)生是因為,當(dāng)使用Math.floor向下舍入負數(shù)時,它會向下舍入到下一個最小的整數(shù),而截斷負值等效於將其向上舍入。

當(dāng)參數(shù)為負數(shù)時,Math.ceil返回與Math.trunc相同的值:

Math.round(2.3); // 因為更接近2,所以向下舍入

Math.round(2.921); // 因為更接近3,所以向上舍入

Math.round(2.5); // 因為正好位于中間,所以向上舍入

Math.round(PI);

Math.round(E);

所有這些方法都非常有用,但它們有一個局限性,即它們始終返回整數(shù)值。如果我們想將數(shù)字舍入到特定的小數(shù)位數(shù)或有效數(shù)字怎麼辦?

在JavaScript中將數(shù)字舍入到小數(shù)位

我們已經(jīng)看到Math.round會將數(shù)字舍入到最接近的整數(shù)。不幸的是,Math對像沒有提供任何方法可以更精確地將數(shù)字舍入到特定的小數(shù)位數(shù)。幸運的是,Number類型有一些內(nèi)置方法可以做到這一點。讓我們來看看它們。

使用Number.toFixed舍入到小數(shù)位

這是一個數(shù)字方法,這意味著它由數(shù)字本身調(diào)用。它將十進制數(shù)舍入到給定的小數(shù)位數(shù),該小數(shù)位數(shù)作為參數(shù)提供:

const test1 = 86;
const test2 = 93;
const test3 = 95;
const average = Math.round((test1 + test2 + test3) / 3);

需要注意的一點是,該值作為字符串返回。您可以通過將方法調(diào)用包裝在Number函數(shù)中來解決此問題,這會將結(jié)果轉(zhuǎn)換回數(shù)字:

Math.floor(2.3); // 向下舍入到2

Math.floor(2.921); // 向下舍入到2

Math.floor(2.5); // 向下舍入到2

Math.floor(PI);

Math.floor(E);

還要注意:如果您嘗試將此方法應(yīng)用於已經(jīng)是整數(shù)的數(shù)字,則如果只使用單個點調(diào)用該方法,則會出錯:

const fruit = ["?", "?", "?", "?", "?"];

const randomFruit = fruit[Math.floor(Math.random() * fruit.length)];

您不能使用單個點在整數(shù)上調(diào)用方法,因為不清楚點是方法調(diào)用運算符還是小數(shù)點。要解決此問題,您可以將整數(shù)放在括號中或使用兩個點,以便清楚地表明您正在調(diào)用方法而不是編寫帶有小數(shù)點的數(shù)字文字:

Math.ceil(2.3); // 向上舍入到3

Math.ceil(2.921); // 向上舍入到3

Math.ceil(2.5); // 向上舍入到3

Math.ceil(PI);

Math.ceil(E);

如果沒有提供參數(shù),則數(shù)字將舍入到最接近的整數(shù)(但作為字符串返回):

const songsPerPlaylist = 10;
const numberOfSongs = 82;
const numberOfPlaylists = numberOfSongs / songsPerPlaylist;

舍入到設(shè)定的幾位小數(shù)的一個常見用例是處理貨幣——例如,如果您想以最接近美分的美元提供某物的價格。假設(shè)您有一個電子商務(wù)網(wǎng)站,正在進行促銷活動,購物車中的任何商品都可享受15%的折扣。在顯示折扣價格之前,可能需要對其進行舍入:

const numberOfPlaylists = Math.ceil(numberOfSongs / songsPerPlaylist);

這可以使用Number.toFixed輕鬆修復(fù):

Math.trunc(2.3); // 只留下2

Math.trunc(2.921); // 只留下2,即使它更接近3

Math.trunc(2.5); // 只留下2

Math.trunc(PI);

Math.trunc(E);

注意:有關(guān)您可能遇到的toFixed()問題的更多信息,請參閱Number().toFixed()舍入錯誤:已損壞但可修復(fù)。

使用Number.toPrecision舍入到小數(shù)位

Number.toPrecision方法的工作方式類似於Number.toFixed方法,但它將數(shù)字舍入到固定數(shù)量的有效數(shù)字。

如果您需要快速提醒有效數(shù)字,它基本上意味著只使用第一個非零數(shù)字。對於大數(shù),最終答案也將用零填充。例如,舍入到兩位有效數(shù)字的數(shù)字53,863將變?yōu)?4,000。這是因為5和3是前兩位非零數(shù)字,並且由於下一個數(shù)字是8,所以它向上舍入。我們需要在末尾添加零以確保舍入值是原始數(shù)字的合理近似值。

您也可以以類似的方式舍入小數(shù)。例如,0.00000623978將舍入到0.0000062到兩位有效數(shù)字,因為6和2是前兩位非零數(shù)字,並且由於下一個數(shù)字是3,所以它向下舍入。

要使用此方法,只需在數(shù)字上調(diào)用它,並提供有效數(shù)字的數(shù)量作為參數(shù)(記住,整數(shù)需要在調(diào)用它們之前放在括號中):

const PI = Math.PI;
const E = Math.E;

請注意,所有值都作為字符串返回,並且可以使用指數(shù)表示法——例如“5.4e 4”而不是“54000”。

如前所述,我們可以通過將方法調(diào)用包裝在Number函數(shù)中來確保返回一個數(shù)字:

const { PI, E } = Math;

舍入到給定有效數(shù)字的一個常見用途是當(dāng)您處理大數(shù)並且不確定它們到底有多大時。例如,假設(shè)您想報告最新帖子被“點贊”的次數(shù),您是將其舍入到最接近的10、100還是1000?在某種程度上,這取決於它的流行程度;如果它只獲得8個贊,您不希望將其舍入到最接近的100,但如果它獲得數(shù)千個贊,那麼將其舍入到最接近的10似乎很愚蠢。解決方案是將其舍入到一位有效數(shù)字:

Math.round(2.3); // 因為更接近2,所以向下舍入

Math.round(2.921); // 因為更接近3,所以向上舍入

Math.round(2.5); // 因為正好位于中間,所以向上舍入

Math.round(PI);

Math.round(E);

JavaScript中舍入數(shù)字的問題

在JavaScript(或任何編程語言)中舍入數(shù)字時,需要注意一些事項。正如您可能知道的那樣,計算機將所有數(shù)據(jù)(包括數(shù)字)存儲為二進製表示。 JavaScript將數(shù)字存儲為32位單精度二進制值。

這樣做的一個問題是,某些十進制數(shù)無法在二進制中精確表示。這通常不會造成任何問題,但它確實會導(dǎo)致一些奇怪的結(jié)果,例如:

const test1 = 86;
const test2 = 93;
const test3 = 95;
const average = Math.round((test1 + test2 + test3) / 3);

這是因為0.1和0.2無法在二進制中精確表示,並且在將它們相加時會產(chǎn)生輕微的誤差。

Math對像有另一個稱為fround的方法,它返回可以使用32位表示的最接近的數(shù)字。例如,0.6125可以精確地表示為二進制0.101,因此這將返回相同的值:

Math.floor(2.3); // 向下舍入到2

Math.floor(2.921); // 向下舍入到2

Math.floor(2.5); // 向下舍入到2

Math.floor(PI);

Math.floor(E);

但是,正如我們上面看到的,0.1無法在32位中精確表示。 Math.fround向我們顯示了可以表示的最接近的數(shù)字:

const PI = Math.PI;
const E = Math.E;

如您所見,它非常接近0.1,但非常略高。在大多數(shù)實際情況下,這不會造成任何問題,但當(dāng)您嘗試舍入某些數(shù)字時,它偶爾會造成一些奇怪的行為:

const { PI, E } = Math;

發(fā)生這種情況是因為十進制3.55無法使用32位精確表示。我們可以使用Math.fround來查看它的實際表示方式:

Math.round(2.3); // 因為更接近2,所以向下舍入

Math.round(2.921); // 因為更接近3,所以向上舍入

Math.round(2.5); // 因為正好位于中間,所以向上舍入

Math.round(PI);

Math.round(E);

如您所見,它實際上由浮點數(shù)3.549999952316284表示,它向下舍入到3.5。

JavaScript中舍入數(shù)字的這些問題並不經(jīng)常發(fā)生,但是如果您正在進行大量舍入,尤其是在結(jié)果必須準(zhǔn)確的情況下,您絕對應(yīng)該注意這些問題。

我應(yīng)該使用哪些舍入數(shù)字的方法?

有了本文中介紹的所有捨入方法,您可能會問哪種方法最好用。答案總是“這取決於”。

如果您只想將數(shù)字舍入到最接近的整數(shù),那麼使用Math.round不會出錯,但是如果您始終希望向下或向上舍入,而不管小數(shù)部分是什麼,您也應(yīng)該考慮使用Math.floorMath.ceil。如果您還計劃舍入負數(shù),請考慮改用Math.trunc。

如果您需要捨入到給定的小數(shù)位數(shù)或有效數(shù)字,則必須使用Number.toFixedNumber.toPrecision。但請注意,這兩個方法都是由數(shù)字調(diào)用的,並返回一個字符串。

您可以在下面的CodePen演示中看到本文中介紹的所有不同類型的捨入示例。

CodePen演示鏈接

有了所有這些不同的方法,您以後應(yīng)該不會再有捨入數(shù)字的問題了。

如果您覺得這篇文章有用,您可能還會喜歡這些:

  • JavaScript數(shù)字趣聞
  • 快速提示:如何在JavaScript中將數(shù)字轉(zhuǎn)換為序數(shù)

關(guān)於在JavaScript中舍入數(shù)字的常見問題解答

如何在JavaScript中將數(shù)字舍入到最接近的整數(shù)?您可以使用Math.round()函數(shù)將數(shù)字舍入到最接近的整數(shù)。例如,Math.round(3.14)將得到3,Math.round(4.76)將得到5。

Math.round()、Math.floor()Math.ceil()有什麼區(qū)別? Math.round()舍入到最接近的整數(shù),Math.floor()向下舍入到最接近的整數(shù),Math.ceil()向上舍入到最接近的整數(shù)。

我可以將數(shù)字舍入到特定的小數(shù)位數(shù)嗎?是的,您可以使用toFixed()方法將數(shù)字舍入到特定的小數(shù)位。例如,let roundedNumber = 3.14159.toFixed(2)將得到3.14。

Math.round()如何處理具有.5小數(shù)部分的數(shù)字? Math.round()使用“四捨五入”邏輯,這意味著當(dāng)小數(shù)部分正好為.5時,它會舍入到最接近的偶數(shù)整數(shù)。例如,Math.round(2.5)的結(jié)果為2,Math.round(3.5)的結(jié)果為4。

我可以使用Math.round()舍入正數(shù)和負數(shù)嗎?是的,Math.round()適用於正數(shù)和負數(shù)。它像往常一樣舍入正數(shù),並將負數(shù)舍入到零。

JavaScript中會發(fā)生舍入錯誤嗎?是的,由於計算機中浮點運算的工作方式,可能會發(fā)生舍入錯誤。務(wù)必注意潛在的精度問題,尤其是在處理非常大或非常小的數(shù)字時。在這種情況下,請考慮使用像decimal.js這樣的庫來進行更精確的算術(shù)運算。

以上是JavaScript中舍入數(shù)字的指南的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java vs. JavaScript:清除混亂 Java vs. JavaScript:清除混亂 Jun 20, 2025 am 12:27 AM

Java和JavaScript是不同的編程語言,各自適用於不同的應(yīng)用場景。 Java用於大型企業(yè)和移動應(yīng)用開發(fā),而JavaScript主要用於網(wǎng)頁開發(fā)。

JavaScript評論:簡短說明 JavaScript評論:簡短說明 Jun 19, 2025 am 12:40 AM

JavascriptconcommentsenceenceEncorenceEnterential gransimenting,reading and guidingCodeeXecution.1)單inecommentsareusedforquickexplanations.2)多l(xiāng)inecommentsexplaincomplexlogicorprovideDocumentation.3)

如何在JS中與日期和時間合作? 如何在JS中與日期和時間合作? Jul 01, 2025 am 01:27 AM

JavaScript中的日期和時間處理需注意以下幾點:1.創(chuàng)建Date對像有多種方式,推薦使用ISO格式字符串以保證兼容性;2.獲取和設(shè)置時間信息可用get和set方法,注意月份從0開始;3.手動格式化日期需拼接字符串,也可使用第三方庫;4.處理時區(qū)問題建議使用支持時區(qū)的庫,如Luxon。掌握這些要點能有效避免常見錯誤。

為什麼要將標(biāo)籤放在的底部? 為什麼要將標(biāo)籤放在的底部? Jul 02, 2025 am 01:22 AM

PlacingtagsatthebottomofablogpostorwebpageservespracticalpurposesforSEO,userexperience,anddesign.1.IthelpswithSEObyallowingsearchenginestoaccesskeyword-relevanttagswithoutclutteringthemaincontent.2.Itimprovesuserexperiencebykeepingthefocusonthearticl

JavaScript與Java:開發(fā)人員的全面比較 JavaScript與Java:開發(fā)人員的全面比較 Jun 20, 2025 am 12:21 AM

JavaScriptIspreferredforredforwebdevelverment,而Javaisbetterforlarge-ScalebackendsystystemsandSandAndRoidApps.1)JavascriptexcelcelsincreatingInteractiveWebexperienceswebexperienceswithitswithitsdynamicnnamicnnamicnnamicnnamicnemicnemicnemicnemicnemicnemicnemicnemicnddommanipulation.2)

什麼是在DOM中冒泡和捕獲的事件? 什麼是在DOM中冒泡和捕獲的事件? Jul 02, 2025 am 01:19 AM

事件捕獲和冒泡是DOM中事件傳播的兩個階段,捕獲是從頂層向下到目標(biāo)元素,冒泡是從目標(biāo)元素向上傳播到頂層。 1.事件捕獲通過addEventListener的useCapture參數(shù)設(shè)為true實現(xiàn);2.事件冒泡是默認行為,useCapture設(shè)為false或省略;3.可使用event.stopPropagation()阻止事件傳播;4.冒泡支持事件委託,提高動態(tài)內(nèi)容處理效率;5.捕獲可用於提前攔截事件,如日誌記錄或錯誤處理。了解這兩個階段有助於精確控制JavaScript響應(yīng)用戶操作的時機和方式。

JavaScript:探索用於高效編碼的數(shù)據(jù)類型 JavaScript:探索用於高效編碼的數(shù)據(jù)類型 Jun 20, 2025 am 12:46 AM

javascripthassevenfundaMentalDatatypes:數(shù)字,弦,布爾值,未定義,null,object和symbol.1)numberSeadUble-eaduble-ecisionFormat,forwidevaluerangesbutbecautious.2)

See all articles