关于js开发中保留小数位计算函数(以向上取整或向下取整的方式保留小数)
程序员文章站
2022-07-01 23:11:02
前端工作中经常遇到数字计算保留小数问题,由于不是四舍五入的方式不能使用toFixed函数,本文采用正则表达式匹配字符串的方式,解决对数字的向上或向下保留小数问题: 1、向上保留小数(只要目标小数位后有有效数字就进1,保证计算后的数值一定不小于原数值) 2、向下保留小数(目标小数位后的数字直接舍弃,保 ......
前端工作中经常遇到数字计算保留小数问题,由于不是四舍五入的方式不能使用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 }
注:本方法对采用科学计数法的数字不做处理直接返回
另:两个函数十分类似,根据自己需求合并优化即可
如发现问题,欢迎指教