日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript四舍五入的改进

發布時間:2025/6/15 javascript 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript四舍五入的改进 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

最近的兩個項目中都有涉及到數據統計的部分,一般來說金額的數據都是選擇保存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) {//少幾位就補幾位0let 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//少幾位就補幾位0for (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"

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

總結

以上是生活随笔為你收集整理的JavaScript四舍五入的改进的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。