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 只有一种数 ...
随机推荐
- Anaconda安装python(idea兼容)
官方网站www.anaconda.com 1 Windos安装 一路下一步,注意添加环境变量 成功过后,测试一下,打开cmd命令行 2 Linux安装 下载完成后上传到linux bash Anaco ...
- OpenLDAP主从
yum -y install compat-openldap必须得安装这个 1:在主上 备份 cp /etc/openldap/slapd.conf /etc/open ...
- MySQL Key值(PRI, UNI, MUL)的含义
PRI主键约束: UNI唯一约束: MUL可以重复. 参考:http://www.cnblogs.com/licheng/archive/2010/10/16/1852938.html
- Hexo-Next6.7.0主题优化
Hexo-Next6.7.0主题优化 效果预览:Next6.7.0主题个人博客 一.下载next主题 $ cd your-hexo-site $ git clone https://github.co ...
- Browser Render Engine & Javascript Engine
Browser Render Engine Programming Language Open Source Javascript Engine Comparation for CSS Compati ...
- 过滤器手动注入Service Bean方法
@Override public void init(FilterConfig arg0) throws ServletException { ServletContext servletContex ...
- 廖雪峰Java6 IO编程-2input和output-7序列化
1.序列化 序列化是指把一个Java对象变成二进制内容byte[] 序列化后可以把byte[]保存到文件中 序列化后可以把byte[]通过网络传输 一个Java对象要能序列化,必须实现Serializ ...
- Qt中三种解析xml的方式
在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...
- 1DAY centos 7.4 u盘安装、网络安装
0xff01 重庆大学开源下载centos 1.下载地址 http://mirrors.cqu.edu.cn/CentOS/7.4.1708/isos/x86_64/ 选择 CentOS-7-x86 ...
- ajax基本原理