js处理小数加减时精度失真
最近公司业务有用js处理数据加减,但有时候会出现很多位小数;后来发现是js处理小数时精度失真;为了后边不在犯类似错误,笔者觉得有必要记录下处理方法,当然处理方法有很多种,这里笔者找了一种较为简洁的方法:
// 返回值:arg1加上arg2的精确结果
function accAdd(arg1, arg2) {
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length
} catch (e) {
r1 = 0
};
try {
r2 = arg2.toString().split(".")[1].length
} catch (e) {
r2 = 0
};
m = Math.pow(10, Math.max(r1, r2));
return (arg1 * m + arg2 * m) / m
} // 返回值:arg1减去arg2的精确结果
function accSub(arg1, arg2) {
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length
} catch (e) {
r1 = 0
};
try {
r2 = arg2.toString().split(".")[1].length
} catch (e) {
r2 = 0
};
m = Math.pow(10, Math.max(r1, r2));
// 动态控制精度长度
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
如有问题,希望大家提出来,共同进步。
js处理小数加减时精度失真的更多相关文章
- js 日期 处理 加减时分秒
1.日期处理 var _d = new Date("2018/01/01 12:00:00"); _d = new Date(_d.valueOf() + 60 * 1000);/ ...
- php小数加减精度问题,比特币计算精度问题
php小数加减精度问题,比特币计算精度问题 在php开发时,有小数加减的场景.结果发现不能够等于预想的值,bccomp比较二个高精确度数字.语法: int bccomp(string left ope ...
- 解决JS文件页面加载时的阻塞
关于页面加载时的时间消费,许多书中都做出了介绍,也提出了很多种方法.本文章就详细介绍XHR注入. 概述:JS分拆的方法 1.XHR注入:就是用ajax异步请求同域包含脚本的文件,然后将返回的字符串转化 ...
- Js点餐加减数量
<button class="add-on" onclick="chgNum(1,'del')" ><i class="icon-m ...
- mysql中使用日期加减时无法识别年-月格式数据的问题,%Y-%m"这种格式数据
最新做报表统计的时候处理按月统计部分时发现,虽然使用 DATE_FORMAT( time, '%Y-%m' ) 函数可以将日期格式转成年-月,但是如果是参数是年-月格式,即"2018-10& ...
- JS生成数字加减乘法验证码
给大家分享一个简单的js验证码生成代码 PS:该代码依赖Jquery1.4版本以上 传入元素 如productionVerificationCode(#\(("a")) 反回验证码 ...
- JS不用通过其他转换两个小数加减得到正确答案
之前写过一篇文章js比较两个属于float类型的小数,都需要通过某种函数转换下,太麻烦了,比如: 减法:10.2345-0.01=10.2245,这是正确的答案,但是当你做加法的时候就变了 加法:10 ...
- JS日期时间加减实现
首先,上代码 var diffDate = function(date, diff) { return new Date( Date.UTC( date.getUTCFullYear(), date. ...
- js 对日期加减
function getDate(days) { var now = new Date(), newDate = new Date(now.getTime() - 86400000 * days), ...
随机推荐
- css两列自适应宽度布局(左定宽,右自适应)
1.利用BFC: <div id="root"> <div class="left">左</div> <div cla ...
- 【SQL查询】查询列中使用条件逻辑_case when then end
select x.范围, count(*) from (select t.ename, case when t.sal <= 100 ...
- Webpack 热部署检测不到文件变化问题
Webpack 热部署检测不到文件变化问题 今天在用Webpack开发的时候,突然发现文件变动后热部署功能不工作了,感觉好像是webpack检测不到文件的修改了.折腾了半天,开始一直以为是自己的代码有 ...
- C++11中提供了std::bind
再来看看std::bind C++11中提供了std::bind.bind()函数的意义就像它的函数名一样,是用来绑定函数调用的某些参数的. bind的思想实际上是一种延迟计算的思想,将可调用对象保存 ...
- SHELL 脚本----常用的命令
一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行she ...
- 【解题报告】[动态规划]RQNOJ PID2 / 开心的金明
原题地址:http://www.rqnoj.cn/problem/2 解题思路:背包问题. 状态转移方程:DP[i][j]=max(DP[i-v[j]][j-1]+p[j]*v[j],DP[i][j- ...
- asp.net core microservices 架构之Task 事务一致性 事件源 详解
一 aspnetcore之task的任务状态-CancellationToken 我有一篇文章讲解了asp.net的线程方面的知识.我们知道.net的针对于多线程的一个亮点就是Task,net clr ...
- java中的修辞
1.final修辞 final修辞变量分为两种:基本类型(byte,short,int,long,float,double,char,boolean)也是值类型,则一旦初始化,值不能改变:应用类型(S ...
- UITextField的使用总结
初始化一个文字框: UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(, , , )]; 设置和获取文字框文 ...
- Django-rest-framework多条件查询/分页/多表Json
http://www.mamicode.com/info-detail-1648765.html