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

資訊專欄INFORMATION COLUMN

JavaScript四舍五入的改進

Atom / 1538人閱讀

摘要:但是在測試中出現了的問題。查了下資料發現是因為浮點數的存儲產生的問題。失去準確性的原因關于浮點數的存儲我了解不多,這里推薦這個文章給需要的同學浮點數陷阱及解法。注意返回的結果都是字符串。

前言

最近的兩個項目中都有涉及到數據統計的部分,一般來說金額的數據都是選擇保存2位小數,以前是使用JavaScript原生對象Number的toFixed方法。但是在測試中出現了3.235.toFixed(2) = 3.23的問題。查了下資料發現是因為浮點數的存儲產生的問題。最后就自己封裝了一個函數來解決這個問題。

1. toFixed失去準確性的原因

關于浮點數的存儲我了解不多,這里推薦這個文章給需要的同學JavaScript 浮點數陷阱及解法。

2. 封裝toFixed 2-1 實現思路

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

小數部分要做3個判斷,當前小數后位數與要保存的位數進行比較。等于的直接返回,當前小數后位數小于要保存的位數就舍棄掉多余的部分。最后一種情況要針對正負數進行不同的處理,詳情見下方代碼。

注意:返回的結果都是字符串。

2-2 代碼
let tofixed = (value, holdLen) => {
    value = value.toString();
    let dotIndex = value.indexOf(".");
    //判斷是否為整數
    if (dotIndex === -1) {
        //少幾位就補幾位0
        let integerStr = ".";
        for (let i = 0; i < holdLen; i++) {
            integerStr = integerStr + "0";
        }
        return value + integerStr;
    }
    //獲取小數點前后的字符串
    let dotBefore = value.split(".")[0];
    let dotAfter = value.split(".")[1];
    //小數點后與要保留的位數進行判斷出來
    let result = "";
    if (dotAfter.length === holdLen) {
        result = value;
    } else if (dotAfter.length < holdLen) {
        let forlength = holdLen - dotAfter.length
        //少幾位就補幾位0
        for (let i = 0; i < forlength; i++) {
            dotAfter = dotAfter + "0";
        }
        result = dotBefore + "." + dotAfter;
    } else {
        //獲取到要四舍五入的位置后一個數字的值
        let digit = value.substr(dotIndex + holdLen + 1, 1);
        if (digit >= 5) {
            let temp = Math.pow(10, 0 - holdLen);
            //負數和正數的四舍五入判斷
            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));

//打印結果
"1.34"
"2.100"
"-8.55"
"-9.000"

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99890.html

相關文章

  • JavaScript DOM 編程藝術》 閱讀摘要

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

    mylxsw 評論0 收藏0
  • JavaScript四舍五入那些坑

    摘要:進制之謎眾所周知,計算機在設計之初,出于各方面角度考慮,最終采用二進制的格式來存儲數據。同樣的情況,也會出現在十進制和二進制的轉換中。當我們在計算機中,聲明一個變量為,其實該數字作為二進制保存在計算機中,并不真的是。 前言 經常使用JavaScript用來處理數字的程序員都知道,JavaScript的Number.toFixed,這一函數,在格式化數字時,會自動進行四舍五入,例如: 1...

    zollero 評論0 收藏0
  • 關于JavaScript隨機數方法

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

    liuyix 評論0 收藏0
  • 如何解決0.1 +0.2===0.30000000000000004類問題

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

    yuanzhanghu 評論0 收藏0
  • 「干貨」細說 Javascript浮點數精度丟失問題(內附好課推薦)

    摘要:前言最近,朋友問了我這樣一個問題在中的運算結果,為什么是這樣的雖然我告訴他說,這是由于浮點數精度問題導致的。由于可以用階碼移動小數點,因此稱為浮點數。它的實現遵循標準,使用位精度來表示浮點數。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 問了我這樣一個問題:在 chrome 中的運算...

    senntyou 評論0 收藏0

發表評論

0條評論

Atom

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<