前端工作中经常遇到数字计算保留小数问题,由于不是四舍五入的方式不能使用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
}

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

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

如发现问题,欢迎指教

关于js开发中保留小数位计算函数(以向上取整或向下取整的方式保留小数)的更多相关文章

  1. iOS开发中常用的数学函数

    iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...

  2. js 向上取整、向下取整、四舍五入

      js 向上取整.向下取整.四舍五入 CreateTime--2018年4月14日11:31:21 Author:Marydon // 1.只保留整数部分(丢弃小数部分) parseInt(5.12 ...

  3. c# 小数四舍五入,向上取整,向下取整,见角进元保留多个小数位数

    /// <summary> /// 实现数据的四舍五入法 /// </summary> /// <param name="v">要进行处理的数据 ...

  4. Oracle - 数字处理 - 取上取整、向下取整、保留N位小数、四舍五入、数字格式化

    用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...

  5. Mock.js开发中拦截Ajax

    Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. 在我们的生产实际中,后端的接口往往是 ...

  6. JS开发中的一些小技巧和方法

    生成指定范围内的随机数 当我们需要获取指定范围(min,max)内的整数的时候,下面的代码非常适合:这段代码用的还挺多的. function setRadomNum(min,max){ return ...

  7. JS 开发中数组常用的方法

    大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...

  8. 提升代码幸福度,五个技巧减少js开发中的if else语句

     壹 ❀ 引 在JavaScript开发中,条件判断语句的使用频率是极高的,而对于条件判断简单易读的if else应该都是大家的首选.可是代码写的久了,我们总是希望自己的代码看着能更为简洁规范(逼格更 ...

  9. Python 之 向上取整、向下取整以及四舍五入函数

    import math f = 11.2 print math.ceil(f) #向上取整 print math.floor(f) #向下取整 print round(f) #四舍五入 #这三个函数的 ...

随机推荐

  1. HTML_项目符号使用图片

    本文出自:http://blog.csdn.net/svitter 创建一个HTML页面. 其内容为一个无序列表. 列表中至少包括了5本畅销书,每本书之前的项目符号必须採用概述封面的缩略图. 这些信息 ...

  2. QFileDialog关于选择文件对话框中的几个信号的说明(currentChanged,directoryEntered,fileSelected,filterSelected)

    QFileDialog关于选择文件对话框中的几个信号 实例: openFile::openFile(QWidget *parent) :QWidget(parent),ui(new Ui::openF ...

  3. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(二)

    GPM怎样控制菜单权限以及菜单的增删显示 因为CCOA中仅仅有属于admin才干够进行权限管理与流程设计.password为pub. 1.加入CCOA功能菜单 进入GPM后,找到编号为CCOA的信息后 ...

  4. MySQL:常见错误01

    ylbtech-MySQL:常见错误01 1.返回顶部 1. [SQL]select * from product_product_tag aLEFT JOIN system_tag b on b.i ...

  5. 第2章 安装Nodejs 2-2 Nodejs版本常识

  6. autofac的小知识点

    autofac 注入中i遇到的泛型传参问题 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

  7. python-day01 pip 在线安装,标识符规则,注释,变量名,类型

    1.python第三方库安装: 在线安装:pip install 库名 pip install 库名 -i 国内源网站地址 离线安装:xxx.tar.gz/rar/zip 解压安装 2.标识符规则: ...

  8. python大杂铺

      python中continue,break,return三者之间的区别 return 会直接令函数返回,所有该函数体内的代码都不再执行了,所以该函数体内的循环也不可能再继续运行. break:跳出 ...

  9. RabbitMQ 官方NET教程(一)【介绍】

    本教程假定RabbitMQ已在标准端口(5672)上的localhost上安装并运行.如果使用不同的主机,端口或凭据,连接设置将需要调整. RabbitMQ是一个消息代理:它接受并转发消息. 您可以将 ...

  10. AFN请求后台返回数据为NSInlineData类型的处理

    在利用AFN进行数据解析时出现返回数据为 <7b227374 61747573 223a302c 226d6573 73616765 223a22e6 82a8e79a 84e6898b e69 ...