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 中Switch-Case 结构的实现
学习Python过程中,发现Python没有Switch-case,过去写C习惯用Switch/Case语句,官方文档说通过if-elif实现.所以不妨自己来实现Switch-Case功能. 方法一 ...
- C166 -MDH
Writing a C logic for moving MDH register contents after MUL instruction http://www.keil.com/forum ...
- react 在 componentWillMount() 中调用异步函数时,componentWillMount() finishes after render()
刚开始使用 react,很多属性.方法不是很熟.在此记录下我所遇到的问题及解决方法. 我在 componentWillMount() 中调用了一个异步函数,在返回结果中调用 this.setState ...
- 织梦Dedecms文件目录结构
Dedecms文件目录结构 /根目录 ../a 默认生成文件存放目录 ../data 系统缓存或其他可写入数据存放目录 ../dede 默认后台登录管理(可任意改名) ../images 系统默认的部 ...
- hbase hbck命令
hbase hbck 只做检查 hbase hbck -fixMeta 根据region目录中的.regioninfo,生成meta表` hbase hbck -fixAssignments 把met ...
- Flask--(项目准备)--框架搭建,配置文件抽取,业务逻辑抽取
抽取配置文件: import logging from redis import StrictRedis class Config(object): """项目的配置&q ...
- [UE4]VR成像原理
一.双眼成像原理 二.3D电影成像原理 模拟人眼.用2个摄像机拍摄,模拟人的左眼和右眼 播放的时候2个投影仪分别同时播放左右摄像机拍摄到内容,观众带上3D眼镜,左眼只能看到左摄像机的内容(过滤右摄像机 ...
- CentOS7.5 安装ssh
yum -y install openssh-clients 如果出现 Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open. 等错误显示了,原来 ...
- C语言数据结构基础学习笔记——基础线性表
线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...
- Android 最简单的MVP案例;
随手撸个发出来: V:界面层 //界面层需要实现P.View方法,然后重写P.View中的方法:M层给的数据就在这些个方法的参数中: // 还要获取到P.Provide的实例,使用P.Provide去 ...