国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于 JavaScript 浮點(diǎn)運(yùn)算的精度解決方案

jsyzchen / 3419人閱讀

摘要:原因至于問題產(chǎn)生的原因,或者關(guān)于問題的更詳細(xì)的描述,大家請(qǐng)看下面幾個(gè)文章浮點(diǎn)運(yùn)算浮點(diǎn)值運(yùn)算舍入誤差基礎(chǔ)浮點(diǎn)數(shù)四則運(yùn)算精度丟失問題解決方案這里主要討論一下解決方案的問題,上面幾篇文章的解決思路,都是重寫加法減法乘法和除法運(yùn)算。

問題背景

在 chrome 瀏覽器中調(diào)出開發(fā)者工具,在控制臺(tái)窗口輸入下面的表達(dá)式:

0.1 + 0.2            // 期望:0.3,結(jié)果:0.30000000000000004

這就是 JavaScript 臭名昭著的浮點(diǎn)值運(yùn)算舍入誤差問題。

原因

至于問題產(chǎn)生的原因,或者關(guān)于問題的更詳細(xì)的描述,大家請(qǐng)看下面幾個(gè)文章:

JavaScript浮點(diǎn)運(yùn)算0.2+0.1 !== 0.3

javascript浮點(diǎn)值運(yùn)算舍入誤差

【JS 基礎(chǔ)】JS 浮點(diǎn)數(shù)四則運(yùn)算精度丟失問題 (3)

解決方案

這里主要討論一下解決方案的問題,上面幾篇文章的解決思路,都是重寫:加法、減法、乘法和除法運(yùn)算。感覺過于啰嗦,方案不簡(jiǎn)潔。簡(jiǎn)單的辦法就是,加、減、乘、除,該怎么算還怎么算。因?yàn)榻Y(jié)果有問題,所以就在結(jié)果上做文章。解決問題的思路,其實(shí)就是考慮在計(jì)算結(jié)果上保留幾位小數(shù)的問題。

代碼如下:

/**
 * 小數(shù)點(diǎn)后面保留第 n 位
 *
 * @param x 做近似處理的數(shù)
 * @param n 小數(shù)點(diǎn)后第 n 位
 * @returns 近似處理后的數(shù) 
 */
function roundFractional(x, n) {
  return Math.round(x * Math.pow(10, n)) / Math.pow(10, n);
}

有了這個(gè)函數(shù),那么加、減、乘、除的計(jì)算就變成下面的形式了:

roundFractional(0.1 + 0.2, 1);         // 結(jié)果:0.3
roundFractional(0.1 * 0.2, 2);         // 結(jié)果:0.02
                                       // 減法和除法依次類推,此處略掉兩行

可以把下面的代碼復(fù)制到 chrome 開發(fā)者工具的控制臺(tái)中,觀察一下運(yùn)行效果:

function roundFractional(x, n) {
  return Math.round(x * Math.pow(10, n)) / Math.pow(10, n);
}
console.log(0.1 + 0.2);
console.log(roundFractional(0.1 + 0.2, 1));
console.log(0.1 * 0.2);
console.log(roundFractional(0.1 * 0.2, 2));

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/92987.html

相關(guān)文章

  • JavaScript數(shù)據(jù)精度缺失問題

    摘要:說到數(shù)據(jù)精度缺失的問題,就想起今年夏天剛轉(zhuǎn)正做的一個(gè)項(xiàng)目。但是和用二進(jìn)制表示的話位數(shù)是無法窮盡的。因此我們看到的用二進(jìn)制表示的某數(shù)只是真實(shí)的的一個(gè)近似數(shù)。這是一個(gè)挺好用的數(shù)據(jù)運(yùn)算工具,它也是為了解決數(shù)據(jù)精度缺失而產(chǎn)生的。 說到數(shù)據(jù)精度缺失的問題,就想起今年夏天剛轉(zhuǎn)正做的一個(gè)項(xiàng)目。當(dāng)時(shí)的需求涉及到金額的計(jì)算,那時(shí)候?qū)s的了解比現(xiàn)在還少,不過當(dāng)時(shí)關(guān)于金額計(jì)算這塊js函數(shù)的封裝是項(xiàng)目里架構(gòu)...

    蘇丹 評(píng)論0 收藏0
  • [ JS 基礎(chǔ) ] JS 浮點(diǎn)數(shù)四則運(yùn)算精度丟失問題 (3)

    摘要:基于這個(gè)問題運(yùn)動(dòng)基礎(chǔ)問題,我想應(yīng)該也有一部分人沒有認(rèn)真對(duì)待過中浮點(diǎn)數(shù)的四則運(yùn)算出現(xiàn)的問題。解決方案引自解決方案為了解決浮點(diǎn)數(shù)運(yùn)算不準(zhǔn)確的問題,在運(yùn)算前我們把參加運(yùn)算的數(shù)先升級(jí)的的次方到整數(shù),等運(yùn)算完后再降級(jí)的的次方。 基于這個(gè)問題:javascript運(yùn)動(dòng)基礎(chǔ)問題 ,我想應(yīng)該也有一部分人沒有認(rèn)真對(duì)待過js中浮點(diǎn)數(shù)的四則運(yùn)算出現(xiàn)的問題。 1.問題描述 示例代碼: var x ...

    hoohack 評(píng)論0 收藏0
  • JavaScript浮點(diǎn)運(yùn)算0.2+0.1 !== 0.3

    摘要:標(biāo)準(zhǔn)二進(jìn)制浮點(diǎn)數(shù)算法就是一個(gè)對(duì)實(shí)數(shù)進(jìn)行計(jì)算機(jī)編碼的標(biāo)準(zhǔn)。然后把取出的整數(shù)部分按順序排列起來,先取的整數(shù)作為二進(jìn)制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。 浮點(diǎn)運(yùn)算JavaScript 本文主要討論JavaScript的浮點(diǎn)運(yùn)算,主要包括 JavaScript number基本類型 二進(jìn)制表示十進(jìn)制 浮點(diǎn)數(shù)的精度 number 數(shù)字類型 在JavaScript中,數(shù)字只有numb...

    iflove 評(píng)論0 收藏0
  • JS中如何理解浮點(diǎn)數(shù)?

    摘要:本文通過介紹的二進(jìn)制存儲(chǔ)標(biāo)準(zhǔn)來理解浮點(diǎn)數(shù)運(yùn)算精度問題,和理解對(duì)象的等屬性值是如何取值的,最后介紹了一些常用的浮點(diǎn)數(shù)精度運(yùn)算解決方案。浮點(diǎn)數(shù)精度運(yùn)算解決方案關(guān)于浮點(diǎn)數(shù)運(yùn)算精度丟失的問題,不同場(chǎng)景可以有不同的解決方案。 本文由云+社區(qū)發(fā)表 相信大家在平常的 JavaScript 開發(fā)中,都有遇到過浮點(diǎn)數(shù)運(yùn)算精度誤差的問題,比如 console.log(0.1+0.2===0.3)// fa...

    bang590 評(píng)論0 收藏0
  • Java 中類型、值和變量 之 基本類型

    摘要:在中存在兩種類型基本類型和引用類型。值得注意的是,基本類型的值的狀態(tài)不會(huì)被共享。浮點(diǎn)類型和它們的值中的浮點(diǎn)類型遵循標(biāo)準(zhǔn)的定義。布爾類型和它們的值類型表示兩個(gè)邏輯量,和。 眾所周知,Java是一門靜態(tài)類型的語(yǔ)言,這意味著所有的變量和表達(dá)式的類型會(huì)在編譯時(shí)確定。同時(shí),Java 還是一門強(qiáng)類型的語(yǔ)言,因此變量的值或表達(dá)式的結(jié)果的類型都會(huì)受到限制(比如一個(gè)聲明為 String 的變量不的值不可...

    beita 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<