js 加减乘除失精
js 计算失精是因为js 先将10十进制代码转化为2进制,再计算导致
具体解决方案:
1. 加
function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[].length}catch(e){r1=}
try{r2=arg2.toString().split(".")[].length}catch(e){r2=}
m=Math.pow(,Math.max(r1,r2))
return (arg1*m+arg2*m)/m
}
2. 减
function Subtr(arg1,arg2){
var r1,r2,m,n;
try{r1=arg1.toString().split(".")[].length}catch(e){r1=}
try{r2=arg2.toString().split(".")[].length}catch(e){r2=}
m=Math.pow(,Math.max(r1,r2));
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
}
更新:
个别情况, 加减依旧有问题, 更新如下:
//加
function accAdd(arg1, arg2) {
var r1,
r2,
m,
num1,
num2;
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));
num1 = r1 == 0? parseInt(arg1 * m): (parseInt(`${arg1.toString().replace('.', '')}`)*m/(Math.pow(10, r1)));
num2 = r2 == 0? parseInt(arg2 * m): (parseInt(`${arg2.toString().replace('.', '')}`)*m/(Math.pow(10, r2)));
return (num1 + num2) / m;
} //减 function Subtr(arg1, arg2) {
var r1,
r2,
m,
n,
num1,
num2;
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;
num1 = r1 == 0? parseInt(arg1 * m): (parseInt(`${arg1.toString().replace('.', '')}`)*m/(Math.pow(10, r1)));
num2 = r2 == 0? parseInt(arg2 * m): (parseInt(`${arg2.toString().replace('.', '')}`)*m/(Math.pow(10, r2)));
return ((num1 - num2) / m).toFixed(n);
}
3.乘
function accMul(arg1,arg2) {
var m=,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[].length}catch(e){}
try{m+=s2.split(".")[].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(,m)
}
4.除
function accDiv(arg1,arg2){
var t1 = , t2 = , r1, r2;
try {
t1 = arg1.toString().split(".")[].length
} catch (e) {}
try {
t2 = arg2.toString().split(".")[].length
} catch (e) {}
r1 = Number(arg1.toString().replace(".", ""))
r2 = Number(arg2.toString().replace(".", ""))
return getMultiFormat((r1 / r2), Math.pow(, t2 - t1));
}
js 加减乘除失精的更多相关文章
- js加减乘除丢失精度
js加减乘除(学了那么久现在才注意到汗==!) /** ** 除法函数,用来得到精确的除法结果 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显.这个函数返回较为精 ...
- js加减乘除在线计算器代码
js加减乘除在线计算器代码 在线演示本地下载
- js小数点失精算法修正
在用js计算0.07*100时候竟然=7.000000000000001 关于js失精算法你都遇到哪些,让我们一起来细数一下吧 console.log(0.07*100); // 7.00000000 ...
- js 加减乘除以及四舍五入 新写法
1 四舍五入 eg: (1.23).round() = 1.2 (1.2456).round(3) = 1.246 Number.prototype.round = function (count) ...
- js加减乘除精确计算
Javascript精确计算时的bug JS无法进行精确计算的bug 在做CRM,二代审核需求审核详情页面时.需要按比例(后端传类似0.8的小数)把用户输入的数字显示在不同的地方. 在做dubheIn ...
- javascript基础(001)-js加减乘除注意事项(含类型转换)
一,加减乘除注意事项: 1.任意类型'+'字符串都被强转字符串 2.数字和布尔类型'+'undefined 结果为 NaN (Not a Number) 3.'-','*','/'操作会尝试把数据转为 ...
- 解决js加减乘除精度问题
// 加法 const accAdd = (arg1, arg2) => { var r1, r2, m; try { r1 = arg1.toString(). ...
- js加减乘除函数
经常用到算数的时候,可以直接用:// 除法函数function accDiv(arg1, arg2) { var t1 = 0, t2 = 0, r1, r2; try { t1 = arg1.toS ...
- Nodejs学习笔记(十七)--- 浮点运算decimal.js
目录 前言 JavaScript加减乘除运算 decimal.js加减乘除运算 前言 开发过程中免不了有浮点运算,JavaScript浮点运算的精度问题会带来一些困扰 JavaScript 只有一种数 ...
随机推荐
- PythonStudy——Python 内置函数 Built-in function
内置方法:Python中声明每一个类系统都会加上一些默认内置方法,提供给系统调用该类的对象时使用.比如需要实例化一个对象时,需要调用该类的init方法:使用print去打印一个类时,其实调用的是str ...
- Mycat 镜像-创建 Docker 镜像
将 Mycat-server 创建到镜像,使其能够进行容器化部署,我们需要创建 Dockerfile 并在文件中安装其依赖项,使用 centos 做为 base 镜像,并安装 jdk 依赖即可,因此创 ...
- Linux中加速访问github
1. 登录http://tool.chinaz.com/dns/ 2. 查询以下域名映射,并分别取访问速度较快的一个ip github.global.ssl.fastly.net -> ...
- Faster R-CNN代码例子
主要参考文章:1,从编程实现角度学习Faster R-CNN(附极简实现) 经常是做到一半发现收敛情况不理想,然后又回去看看这篇文章的细节. 另外两篇: 2,Faster R-CNN学习总结 ...
- crossdomain.xml配置不当的利用和解决办法
00x1: 今天在无聊的日站中发现了一个flash小站,点进crossdomain.xml一看,震惊 本屌看到这个*就发觉事情不对 百度一下,这是一个老洞,配置不当能引起各种问题就算能远程加载恶意的s ...
- Hibernate一对多OnetoMany
------------------------Hibernate一对多OnetoMany 要点: 配置在一端. 1.如果是单向关联,即只在一端配置OneToMany,多端不配置ManyToOne.则 ...
- js获取浏览器内核判断终端(是QQ打开还是QQ浏览器打开)
var browser ={ versions: function() { var u = navigator.userAgent, var ua = navigator.userAgent.toLo ...
- Dubbo源码解析之registry注册中心
阅读须知 dubbo版本:2.6.0 spring版本:4.3.8 文章中使用/* */注释的方法会做深入分析 正文注册中心是Dubbo的重要组成部分,主要用于服务的注册与发现,我们可以选择Redis ...
- vmware 里MAC 鼠标能移动 无法单击
vmware 里MAC 鼠标能移动 无法单击 移动有效果,能看到鼠标移动的光标,鼠标放到mac的图标上还有提示,就是无法单击. 键盘正常. 重启mac,重启vmware 20次好了,2小时.
- Mysql 日期加减
mysql表中有一些字段是显示日期的.因为各种需要,需要将它时间往后调整1年. mysql 日期增加一年的更新语句更新的语句如下: UPDATE table SET date = DATE_A ...