博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript:将数字字符串处理为任何自己想要的格式
阅读量:6529 次
发布时间:2019-06-24

本文共 2260 字,大约阅读时间需要 7 分钟。

最近项目中有这样需求,将一个数字字符串处理为需要的格式,比如:

var num = 0.431 // 处理为0.44var num2 = 1.998 // 处理为2.00复制代码

所以我就想有没有这样一个办法,将一个数字字符串转为任何我想要的数字格式,JavaScript的字符串、数字处理的相关方法想了一遍,貌似都不支持这种处理(支持处理为整数或者浮点数,支持进一位、四舍五入或者截取为任意位数)

思考后写了以下的处理方法,如有不妥,还请指正

/*** @param {string|number} num 要处理的数字字符串或者数字本身* @param {number} decimalPlace 要保留的小数位数* @param {number} 处理数据类型 1 向上取整 2 向下取整  默认四舍五入* @returns {string} 返回处理后的数字字符串*/function getFixVal(num, decimalPlace, dealState) {  // 若传入的不是数字格式,则不处理  if (isNaN(parseFloat(num))) {    return false;  }  let sNum = num + '';  const idx = sNum.indexOf('.');  // 若处理的数据类型为默认的四舍五入,则直接取用toFixed函数的处理结果  if (!dealState || (dealState != 1 && dealState != 2) || idx === -1) {    return parseFloat(num).toFixed(decimalPlace);  }  const arrNum = sNum.split('.');  let decimalNum = arrNum[1]; // 获取小数位的数字  let integerPart = arrNum[0];  // 若要求的小数位数大于0,则返回整数部分加上处理之后的小数部分,否则返回整数.  if (decimalPlace > 0) {    let isAdd = false; // 向上取整是否需要进一位    // 若小数位数字位数已经大于要保留的位数,则做以下处理    if (decimalNum.length > decimalPlace) {      let front = decimalNum.substring(0, decimalPlace);      let end = decimalNum.substring(decimalPlace, decimalPlace + 1);      // 若向上取整,则小数点后数字在原有基础上加1      switch (dealState) {        case 1:          if (parseInt(end) > 0) {            let temp = (parseInt(front) + 1) / Math.pow(10, decimalPlace);            // 若无需进位,如98 + 1 = 99  99 / 100 = 0.99,则截取小数点后两位            if (temp < 1) {              decimalNum = (temp + '').substring(2, decimalPlace + 2);              if (decimalNum.length < decimalPlace) decimalNum = decimalNum.padEnd(decimalPlace, '0');            } else {              decimalNum = ''.padEnd(decimalPlace, '0');              isAdd = true;            }          }          break;        default:          decimalNum = front;      }    } else {      decimalNum = decimalNum.padEnd(decimalPlace, '0')    }    if (isAdd) integerPart = parseInt(integerPart) + 1;    return integerPart + '.' + decimalNum.substring(0, decimalPlace); // 再次substring是因为有精度问题  } else {    // 若要求处理为整数,做以下处理    switch (dealState) {      case 1:        sNum = Math.ceil(num) + '';        break;      default:        sNum = Math.floor(num) + '';    }    return sNum;  }}复制代码

发现了一篇更详细的处理js浮点数精度问题的文章

转载于:https://juejin.im/post/5c23594be51d4541d80743ae

你可能感兴趣的文章
讨论一下文章的阅读量 (个人观点)
查看>>
京东,你玩我?
查看>>
[Unity3D]蓝港面试题
查看>>
同一个账号启动两个resin而要求使用不同jdk的解决方法
查看>>
ios 排序汇总
查看>>
cocoside 编译错误可能问题
查看>>
Linux命令-网络命令:write
查看>>
ZH奶酪:自然语言处理工具LTP语言云调用方法
查看>>
免费素材:包含 250+ 组件的 DO UI Kit
查看>>
让代码带你飞:去第二个地球要飞多久
查看>>
Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感 是印度上古时期一些文献的总称...
查看>>
Linux下恢复删除的文件
查看>>
wcf实体和ef实体冲突。。。
查看>>
从join on和where执行顺序认识T-SQL查询处理执行顺序
查看>>
nginx服务配置---php服务接入
查看>>
软件开发数据类型基础
查看>>
《Linux Device Drivers》第十章 中断处理——note
查看>>
记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮
查看>>
iOS 跳转到系统的设置界面
查看>>
The dependency `BaiduMapKit` is not used in any concrete target
查看>>