关于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
}
注:本方法对采用科学计数法的数字不做处理直接返回
另:两个函数十分类似,根据自己需求合并优化即可
如发现问题,欢迎指教
关于js开发中保留小数位计算函数(以向上取整或向下取整的方式保留小数)的更多相关文章
- iOS开发中常用的数学函数
iOS开发中常用的数学函数 /*---- 常用数学公式 ----*/ //指数运算 3^2 3^3 NSLog(,)); //result 9 NSLog(,)); //result 27 //开平方 ...
- js 向上取整、向下取整、四舍五入
js 向上取整.向下取整.四舍五入 CreateTime--2018年4月14日11:31:21 Author:Marydon // 1.只保留整数部分(丢弃小数部分) parseInt(5.12 ...
- c# 小数四舍五入,向上取整,向下取整,见角进元保留多个小数位数
/// <summary> /// 实现数据的四舍五入法 /// </summary> /// <param name="v">要进行处理的数据 ...
- Oracle - 数字处理 - 取上取整、向下取整、保留N位小数、四舍五入、数字格式化
用oracle sql对数字进行操作: 取上取整.向下取整.保留N位小数.四舍五入.数字格式化 取整(向下取整): select floor(5.534) from dual; select trun ...
- Mock.js开发中拦截Ajax
Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. 在我们的生产实际中,后端的接口往往是 ...
- JS开发中的一些小技巧和方法
生成指定范围内的随机数 当我们需要获取指定范围(min,max)内的整数的时候,下面的代码非常适合:这段代码用的还挺多的. function setRadomNum(min,max){ return ...
- JS 开发中数组常用的方法
大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...
- 提升代码幸福度,五个技巧减少js开发中的if else语句
壹 ❀ 引 在JavaScript开发中,条件判断语句的使用频率是极高的,而对于条件判断简单易读的if else应该都是大家的首选.可是代码写的久了,我们总是希望自己的代码看着能更为简洁规范(逼格更 ...
- Python 之 向上取整、向下取整以及四舍五入函数
import math f = 11.2 print math.ceil(f) #向上取整 print math.floor(f) #向下取整 print round(f) #四舍五入 #这三个函数的 ...
随机推荐
- git tag打标签常用命令
# 创建轻量标签$ git tag v0.1.2-light 切换到标签 与切换分支命令相同,用git checkout [tagname]查看标签信息用git show命令可以查看标签的版本信息:$ ...
- android 随手记之文件+參数上传请求
第一步:须要两个jar的支持,稍后以下给会出下载地址. 第二步:建立一个project 以下贴出最基本的代码 package com.example.testpaizhao; import java. ...
- 最小堆min_stack
class MinStack {public: void push(int x) { ele.push(x); if(min.empty()||x<=min.top()) // in or ...
- HDU2037 事件排序问题
题目要求: Problem Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!&q ...
- jQuery - 制作点击显示二级菜单效果
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- jquery-layer弹出框
样式1: 代码: 前台jsp: $("#add_table").bind("click",function(){ layer.open({ type: 2, t ...
- C#遍历DataSet与DataSet元素实现代码
C#中的Dataset就像一个数据库,有多个表(Table),一般只有一个表,然后每个表中有行(DataRow)和列(DataColumn),DataRow[DataColumn]可以得到某行某列数据 ...
- B1208 [HNOI2004]宠物收养所 平衡树||set (滑稽)
这个题是一道splay裸题,但是我不太会写,所以用set直接水过去!!!哈哈哈哈,美滋滋. set总结: set是一个集合,然后里面没用重复的元素.里面有一些函数: begin() ,返回se ...
- 跟渣渣辉玩ffms
[SQL] /* Navicat MySQL Data Transfer Source Server : root Source Server Version : 50717 Source Host ...
- Highways(prim)
http://poj.org/problem?id=2485 此题是求最小生成树里的最大权值.prim算法: #include<stdio.h> #include<string.h& ...