zoukankan      html  css  js  c++  java
  • 关于js开发中保留小数位计算函数(以向上取整或向下取整的方式保留小数)

    前端工作中经常遇到数字计算保留小数问题,由于不是四舍五入的方式不能使用toFixed函数,本文采用正则表达式匹配字符串的方式,解决对数字的向上或向下保留小数问题:

    1、向上保留小数(只要目标小数位后有有效数字就进1,保证计算后的数值一定不小于原数值)

    function upFixed (num, fix) {
      // num为原数字,fix是保留的小数位数
      let result = '0'
      if (Number(num) && fix > 0) { // 简单的做个判断
        fix = +fix || 2
        num = num + ''
        if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
          result = num
        } else if (!/./.test(num)) { // 如果没有小数点
          result = num + `.${Array(fix + 1).join('0')}`
        } else { // 如果有小数点
          num = num + `${Array(fix + 1).join('0')}`
          let reg = new RegExp(`-?\d*\.\d{0,${fix}}`)
          let floorStr = reg.exec(num)[0]
          if (+floorStr >= +num) {
            result = floorStr
          } else {
            let floorNumber = +floorStr + +`0.${Array(fix).join('0')}1`
            let point = /./.test(floorNumber + '') ? '' : '.'
            let floorStr2 = floorNumber + point + `${Array(fix + 1).join('0')}`
            result = reg.exec(floorStr2)[0]
          }
        }
      }
      return result
    }

    2、向下保留小数(目标小数位后的数字直接舍弃,保证计算后的数值一定不大于原数值)

    function downFixed (num, fix) {
      // num为原数字,fix是保留的小数位数
      let result = '0'
      if (Number(num) && fix > 0) { // 简单的做个判断
        fix = +fix || 2
        num = num + ''
        if (/e/.test(num)) { // 如果是包含e字符的数字直接返回
          result = num
        } else if (!/./.test(num)) { // 如果没有小数点
          result = num + `.${Array(fix + 1).join('0')}`
        } else { // 如果有小数点
          num = num + `${Array(fix + 1).join('0')}`
          let reg = new RegExp(`-?\d*.\d{0,${fix}}`)
          result = reg.exec(num)[0]
        }
      }
      return result
    }

    注:本方法对采用科学计数法的数字不做处理直接返回

    另:两个函数十分类似,根据自己需求合并优化即可

    如发现问题,欢迎指教

  • 相关阅读:
    PhpStorm (强大的PHP开发环境)2017.2.4 附注册方法
    laravel中数据库在哪个文件中配置
    php artisan 命令报错,什么命令都是这个错误,cmd下运行也不行,又没看到语法错误...
    SQL Server 2008读书笔记(4):设计SQL Server索引
    Home Dubbo Alibaba Open Sesame
    dynamic language compare great!
    java Math.round()
    regex for java example
    Pycoder's Weekly, Issue #1 Let there be light.
    使用Maven2进行单元测试_我心飞扬_百度空间
  • 原文地址:https://www.cnblogs.com/lylszo/p/10497038.html
Copyright © 2011-2022 走看看