js 乘法运算 小数问题
js对小数进行乘法运算,出现这个问题
3*9.9=29.700000000000003
网上的说法是js的浮点运算bug,这里记录一下。
解决方法是自己写一个运算方法:
转载自: http://www.cnsdn.com.cn/blog/article.asp?id=2079
程序代码
//除法函数,用来得到精确的除法结果
//说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
//给Number类型增加一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
return accDiv(this, arg);
}
//乘法函数,用来得到精确的乘法结果
//说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2)
{
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
//给Number类型增加一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg){
return accMul(arg, this);
}
//加法函数,用来得到精确的加法结果
//说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值: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
}
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
return accAdd(arg,this);
}
在你要用的地方包含这些函数,然后调用它来计算就可以了。
比如你要计算:7*0.8 ,则改成 (7).mul(8)
js 乘法运算 小数问题相关推荐
- js做小数运算精度问题
当js做小数运算时存在bug,大概是因为二进制和十进制转换之间的关系. bug如图 解决方案 1.运算结果后,乘以100再除以100.网上推荐这种方法但是乘以1000再除以1000依然存在精度问题 2 ...
- 前端保留两位有效数字_用js取小数点后两位的一些方法
用js取小数点后两位的一些方法,了解下? Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取.function getnum( ...
- js 将小数转为科学记数法
js 将小数转为科学记数法 例如将数字0.00342331转化为3.42331×10^-3的方式展示 先用toExponential方法把数字转为科学记数法的字符串,在用正则表达式将小数部分与10的几 ...
- vue 使用 currency.js 处理 小数的相加减 精度问题
vue 使用 currency.js 处理 小数的相加减 精度问题 安装 currency.js npm install --save currency.js 或者 yarn add currency ...
- JS保留小数点后有效数字两位
JS保留小数点后有效数字两位 在想保留小数点后有效数字保留两位时,需用到嵌套方法一层一层的去判断当前位数的数字是否为有效数字,但如遇到小数点过多的数字,js语法会将其自动变为科学记数法进行保存,所以在 ...
- Js 对小数的处理(科学计数法 , 显示精度)
对数字进行格式化输出,是非常有意义的一件事情,例如许多时候,我们希望一个数字能够输出为指定格式的字符串,拿25.9878来说,我们可能会希望它能保留两位小数来说出,即结果为25.99,或者对于0.34 ...
- js取小数点后两位数的方法
四舍五入以下处理结果会四舍五入:toFixed( ) var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45 不四舍五入以下处理结果不会四舍 ...
- js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;
原博1 原博2 方案1和方案2都是有效的 情景: 在计算浮点数时候,出现多余小数. 例如: 1.11 + 1 = 2.1100000000000003 为什么计算小数会出现误差? 浮点数值的最高进度是 ...
- js 取小数整数部分
1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.round(7/2) 4, ...
最新文章
- TTL电平、CMOS电平、RS232电平的区别
- 基于MNIST的GANs实现【Pytorch】
- pythonselenium获取html标签内容_python selenium 如何获取网页页面所有可以点击的元素?...
- 游戏性能优化技术干货分享——内存管理
- 彻底弄懂为什么不能把栈上分配的数组(字符串)作为返回值
- windows10把单独文件固定到开始屏幕
- 《流畅的Python》读书笔记——Python一等函数
- RDPWrap1.6.2让windows家庭版Home实现远程桌面
- 射频芯片ATE测试从入门到放弃之基本概念
- 富爸爸系列:富爸爸穷爸爸实践
- C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符
- anaconda prompt和cmd和powershell和anaconda powershell prompt和git bash有什么区别
- 十年生死两茫茫,当我们已不再年轻——焦版小李飞刀
- 都有云技术了,传统动态vps还有什么用?
- 深入理解计算机系统(第三版)家庭作业 第八章
- AG256SL100 与EPM240T100 完全PIN TO PIN兼容
- Linux大全——Linux系统学习资源合集
- ocx插件: AniGIF.ocx安装
- html 画星星的坐标,如何使用画布HTML5绘制星星?
- 三、安装 Entity Framework Core
热门文章
- unity2D备忘志(二)
- 【2023秋招】10月19日华为通用软件开发三道题
- 我的世界java爱的暮色森林_《我的世界》MC暮色森林四大魔法树,最后一个太神秘而未知作用!...
- 惠普暗影精灵 8 台式机 评测
- 领导者需要掌握的艺术
- 怎么去除视频水印不留痕迹?试试这几个方法吧
- 入耳式蓝牙耳机什么牌子好,618适合学生党的蓝牙耳机推荐
- 云南茶叶品类详细介绍,不少于500字数
- matlab 周期0-1,周期为2s的方波信号,在【-1 0】取值为-1,在【0 1】取值为1,利用matlab求该方波信号的傅里叶级数展开各项系数...
- 做好过冬准备 滴滴宣布将裁员15% 涉及员工超2000人