亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

jJavaScript中toFixed()和正則表達(dá)式的坑

 更新時(shí)間:2022年04月19日 17:18:39   作者:今天寫(xiě)注釋了嗎?  
這篇文章主要介紹了jJavaScript中toFixed()和正則表達(dá)式的坑,toFixed方法可以把Number四舍五入為指定小數(shù)位數(shù)的數(shù)字,具體詳細(xì)內(nèi)容需要的小伙伴可以參考一下

toFixed精度問(wèn)題

toFixed方法可以把Number四舍五入為指定小數(shù)位數(shù)的數(shù)字??墒谴蠹铱聪孪旅孢@張圖,發(fā)現(xiàn)了什么?

屏幕快照 2022-04-15 下午2.04.02.png

0.985四舍五入之后變成了0.98??!

  • 這就是toFixed方法的坑。

導(dǎo)致原因

那這到底是怎么回事呢?本質(zhì)其實(shí)是因?yàn)閖s小數(shù)的精度問(wèn)題。 在計(jì)算機(jī)中計(jì)算,是將數(shù)字轉(zhuǎn)成二進(jìn)制,進(jìn)行計(jì)算之后再轉(zhuǎn)化為十進(jìn)制。 比如將0.985轉(zhuǎn)化為二進(jìn)制是0.1111110000101000(超出精度,結(jié)果保留了16位小數(shù)),此時(shí)再將該二進(jìn)制轉(zhuǎn)化為十進(jìn)制結(jié)果為:0.9849853515625,此時(shí)將他保留兩位小數(shù)就成了0.98。

解決辦法

  • 那么要如何避免這種問(wèn)題呢?可以用下面的方法來(lái)補(bǔ)充原生的toFixed方法
toFixed(number, precision) {
    var str = number + "";
    var len = str.length;
    var last = str.substring(len - 1, len);
    var afterPoint = str.substring(str.indexOf(".") + 1, len);
    if (last == "5" && afterPoint.length > precision) {
        last = "6";
        str = str.substring(0, len - 1) + last;
        return (str - 0).toFixed(precision);
    } else {
        return number.toFixed(precision);
    }
},

正則表達(dá)式全局匹配的坑

有這么一個(gè)需求,select支持可以搜索item。剛看到我就興致沖沖去寫(xiě)了,這還不簡(jiǎn)單嗎,輸入的數(shù)據(jù)和select中的數(shù)據(jù)源進(jìn)行正則匹配,匹配到的就是搜索到的。

過(guò)濾函數(shù)我是這么寫(xiě)的:

//searchKey是輸入的數(shù)據(jù)
const regex = new RegExp(searchKey.trim(), 'gi');
let dataSource = [
    {
        value: 'test1',
    },

    {
        value: 'test2',
    },
];
let res = dataSource
    .map((i) => {
            let _flag = regex.test(i.value);
            i.visible = _flag;
            return i;
    })
    .filter((i) => i.visible);

但是實(shí)際運(yùn)行時(shí),發(fā)現(xiàn)數(shù)據(jù)源中的數(shù)據(jù),有的可以匹配到有的匹配不到。當(dāng)時(shí)就納悶了,這有什么問(wèn)題嗎?最后幾經(jīng)查找答案,原來(lái)是正則表達(dá)式的全局匹配有個(gè)坑:正則表達(dá)式中有一個(gè)lastIndex的屬性,這個(gè)屬性表示上一次匹配文本結(jié)果之后的第一個(gè)字符的位置。他在下一次查找的時(shí)候,會(huì)從lastIndex往后繼續(xù)查找,這就會(huì)導(dǎo)致一下個(gè)匹配返回false。

那么如何解決呢?

因?yàn)?code>lastIndex屬性是可讀可寫(xiě)的,所以我這里的解決辦法是每次test方法之后將將lastIndex置為零,這樣每次匹配都將會(huì)從最開(kāi)始進(jìn)行查找。這樣就會(huì)避免這個(gè)問(wèn)題了哦!

let _flag = regex.test(i.value);
regex.lastIndex = 0;

到此這篇關(guān)于jJavaScript中toFixed()和正則表達(dá)式的坑的文章就介紹到這了,更多相關(guān)toFixed()和正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論