超大数字四舍五入保留N位小数【没bug】

大部分npm常用的插件四舍五入都是用数值直接去计算四舍五入的存在精度问题,本方法是用用字符串拆分比较整数大小,这样就避开了精度的问题;

该方法可以传入:1.134、99.99、9999999999999999999.99999、.001、12.、0.、00.、类似的奇葩字符都会自动处理补全

代码如下:

javascript 复制代码
function setRound(v, n) {
  if(isNaN(v)) return 'NaN';
  const values = v.split(".");
  function get0(lastV){
    // 补0函数
    var s0 = lastV + '0000000000000000000000'
    return s0.substring(0, n)
  }
  let integerStr = values[0];
  let decimalStr2 = values[1].substring(0, n)
  let decimalStr = values[1].substring(0, n+1);
  const lastN = Number(decimalStr.slice(-1));
  if(!values[1]) return integerStr + "." + get0(decimalStr2);
  if(decimalStr && decimalStr.length > n){ // 小数位超过n位数
    if(lastN >= 5){
      decimalStr2 = decimalStr2 - 0 + 1 // 五入
      if(decimalStr2.toString().length > n){ // 如果小数位超过n+1位数
        decimalStr2 = get0('0')
        integerStr = Number(integerStr) + 1
      }
    }
  }
  integerStr = Number(integerStr) // 规范00.134、.134这种整数位
  return integerStr + "." + get0(decimalStr2)
}
相关推荐
真上帝的左手5 小时前
24. 前端-js框架-Electron
前端·javascript·electron
克喵的水银蛇6 小时前
Flutter 弹性布局实战:Row/Column/Flex 核心用法与优化技巧
前端·javascript·typescript
verse_armour6 小时前
东南大学云课堂导出PPT
javascript
涔溪6 小时前
深入了解 Node.js 性能诊断工具 Clinic.js 的底层工作原理
开发语言·javascript·node.js
Neptune16 小时前
js防抖技术:从原理到实践,如何解决高频事件导致的性能难题
前端·javascript
是你的小橘呀6 小时前
从爬楼梯到算斐波那契,我终于弄懂了递归和动态规划这俩 "磨人精"
前端·javascript·面试
m0_740043736 小时前
Vuex中commit和dispatch的核心区别
前端·javascript·html
BD_Marathon6 小时前
【JavaWeb】JS_数据类型和变量
开发语言·javascript·ecmascript
渴望成为python大神的前端小菜鸟6 小时前
VUE 面试题
前端·javascript·vue.js·面试题
想要成为糕糕手6 小时前
深入理解 JavaScript 中的 “this”:从自由变量到绑定规则
前端·javascript