亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript四舍五入的改進(jìn)

Atom / 1599人閱讀

摘要:但是在測(cè)試中出現(xiàn)了的問(wèn)題。查了下資料發(fā)現(xiàn)是因?yàn)楦↑c(diǎn)數(shù)的存儲(chǔ)產(chǎn)生的問(wèn)題。失去準(zhǔn)確性的原因關(guān)于浮點(diǎn)數(shù)的存儲(chǔ)我了解不多,這里推薦這個(gè)文章給需要的同學(xué)浮點(diǎn)數(shù)陷阱及解法。注意返回的結(jié)果都是字符串。

前言

最近的兩個(gè)項(xiàng)目中都有涉及到數(shù)據(jù)統(tǒng)計(jì)的部分,一般來(lái)說(shuō)金額的數(shù)據(jù)都是選擇保存2位小數(shù),以前是使用JavaScript原生對(duì)象Number的toFixed方法。但是在測(cè)試中出現(xiàn)了3.235.toFixed(2) = 3.23的問(wèn)題。查了下資料發(fā)現(xiàn)是因?yàn)楦↑c(diǎn)數(shù)的存儲(chǔ)產(chǎn)生的問(wèn)題。最后就自己封裝了一個(gè)函數(shù)來(lái)解決這個(gè)問(wèn)題。

1. toFixed失去準(zhǔn)確性的原因

關(guān)于浮點(diǎn)數(shù)的存儲(chǔ)我了解不多,這里推薦這個(gè)文章給需要的同學(xué)JavaScript 浮點(diǎn)數(shù)陷阱及解法。

2. 封裝toFixed 2-1 實(shí)現(xiàn)思路

大體的思路是先分2部分,一是整數(shù)部分。整數(shù)部分不需要對(duì)值進(jìn)行修改,為了和Number.toFixed保持一致,需要補(bǔ)上對(duì)應(yīng)的0 (8.toFixed(2) => 8.00);

小數(shù)部分要做3個(gè)判斷,當(dāng)前小數(shù)后位數(shù)與要保存的位數(shù)進(jìn)行比較。等于的直接返回,當(dāng)前小數(shù)后位數(shù)小于要保存的位數(shù)就舍棄掉多余的部分。最后一種情況要針對(duì)正負(fù)數(shù)進(jìn)行不同的處理,詳情見(jiàn)下方代碼。

注意:返回的結(jié)果都是字符串。

2-2 代碼
let tofixed = (value, holdLen) => {
    value = value.toString();
    let dotIndex = value.indexOf(".");
    //判斷是否為整數(shù)
    if (dotIndex === -1) {
        //少幾位就補(bǔ)幾位0
        let integerStr = ".";
        for (let i = 0; i < holdLen; i++) {
            integerStr = integerStr + "0";
        }
        return value + integerStr;
    }
    //獲取小數(shù)點(diǎn)前后的字符串
    let dotBefore = value.split(".")[0];
    let dotAfter = value.split(".")[1];
    //小數(shù)點(diǎn)后與要保留的位數(shù)進(jìn)行判斷出來(lái)
    let result = "";
    if (dotAfter.length === holdLen) {
        result = value;
    } else if (dotAfter.length < holdLen) {
        let forlength = holdLen - dotAfter.length
        //少幾位就補(bǔ)幾位0
        for (let i = 0; i < forlength; i++) {
            dotAfter = dotAfter + "0";
        }
        result = dotBefore + "." + dotAfter;
    } else {
        //獲取到要四舍五入的位置后一個(gè)數(shù)字的值
        let digit = value.substr(dotIndex + holdLen + 1, 1);
        if (digit >= 5) {
            let temp = Math.pow(10, 0 - holdLen);
            //負(fù)數(shù)和正數(shù)的四舍五入判斷
            parseFloat(value) > 0 ? value = parseFloat(value) + temp : value = parseFloat(value) - temp;
            value = value.toString();
        }
        result = value.substr(0, dotIndex + holdLen + 1);
    }
    return result;
}
console.log(tofixed(1.335, 2));
console.log(tofixed(2.1, 3));
console.log(tofixed(-8.546, 2));
console.log(tofixed(-9, 3));

//打印結(jié)果
"1.34"
"2.100"
"-8.55"
"-9.000"

我的處理辦法很粗糙,希望各位多多給出意見(jiàn)。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99890.html

相關(guān)文章

  • JavaScript DOM 編程藝術(shù)》 閱讀摘要

    概念: 平穩(wěn)退化 漸進(jìn)增強(qiáng) 以用戶(hù)為中心 第一章 js簡(jiǎn)史 可以使用DOM(Document Object Model)給HTML(HyperText Markup Language)文檔增加交互能力,就像CSS(Cascading Style Sheet)給文檔增加樣式一樣。DOM是一種API(Application Programing Interface),就是一種已得到各方認(rèn)同的基本約...

    mylxsw 評(píng)論0 收藏0
  • JavaScript四舍五入那些坑

    摘要:進(jìn)制之謎眾所周知,計(jì)算機(jī)在設(shè)計(jì)之初,出于各方面角度考慮,最終采用二進(jìn)制的格式來(lái)存儲(chǔ)數(shù)據(jù)。同樣的情況,也會(huì)出現(xiàn)在十進(jìn)制和二進(jìn)制的轉(zhuǎn)換中。當(dāng)我們?cè)谟?jì)算機(jī)中,聲明一個(gè)變量為,其實(shí)該數(shù)字作為二進(jìn)制保存在計(jì)算機(jī)中,并不真的是。 前言 經(jīng)常使用JavaScript用來(lái)處理數(shù)字的程序員都知道,JavaScript的Number.toFixed,這一函數(shù),在格式化數(shù)字時(shí),會(huì)自動(dòng)進(jìn)行四舍五入,例如: 1...

    zollero 評(píng)論0 收藏0
  • 關(guān)于JavaScript隨機(jī)數(shù)方法

    摘要:另外,這幾篇幾個(gè)不錯(cuò)的隨機(jī)生成隨機(jī)數(shù)采用對(duì)獲取的浮點(diǎn)數(shù)進(jìn)行取整操作,也是同樣的問(wèn)題,能取到左端點(diǎn),卻無(wú)法取到右端點(diǎn)。 最近在琢磨內(nèi)置對(duì)象Math的時(shí)候,參考了很多網(wǎng)上資料,不過(guò)我在Google中搜索js 隨機(jī)整數(shù),出來(lái)很多博客文章,很遺憾,在我看來(lái)排名靠前的這些文章都是錯(cuò)誤的。接下來(lái)我將會(huì)論證我這一觀點(diǎn),同時(shí)把我所理解的Math.random()方法跟你分享。showImg(https...

    liuyix 評(píng)論0 收藏0
  • 如何解決0.1 +0.2===0.30000000000000004類(lèi)問(wèn)題

    摘要:方法使用定點(diǎn)表示法來(lái)格式化一個(gè)數(shù),會(huì)對(duì)結(jié)果進(jìn)行四舍五入。該數(shù)值在必要時(shí)進(jìn)行四舍五入,另外在必要時(shí)會(huì)用來(lái)填充小數(shù)部分,以便小數(shù)部分有指定的位數(shù)。如果數(shù)值大于,該方法會(huì)簡(jiǎn)單調(diào)用并返回一個(gè)指數(shù)記數(shù)法格式的字符串。在環(huán)境中,只能是之間,測(cè)試版本為。 showImg(https://segmentfault.com/img/remote/1460000011913134?w=768&h=521)...

    yuanzhanghu 評(píng)論0 收藏0
  • 「干貨」細(xì)說(shuō) Javascript浮點(diǎn)數(shù)精度丟失問(wèn)題(內(nèi)附好課推薦)

    摘要:前言最近,朋友問(wèn)了我這樣一個(gè)問(wèn)題在中的運(yùn)算結(jié)果,為什么是這樣的雖然我告訴他說(shuō),這是由于浮點(diǎn)數(shù)精度問(wèn)題導(dǎo)致的。由于可以用階碼移動(dòng)小數(shù)點(diǎn),因此稱(chēng)為浮點(diǎn)數(shù)。它的實(shí)現(xiàn)遵循標(biāo)準(zhǔn),使用位精度來(lái)表示浮點(diǎn)數(shù)。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 問(wèn)了我這樣一個(gè)問(wèn)題:在 chrome 中的運(yùn)算...

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

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

0條評(píng)論

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