Javascript保证精度的小数乘法
众所周知,js的小数乘法很容易丢失精度,这是一件很恶心的事情。
所以我写了这个方法,保证计算精度。
/**
* js小数乘法
*@parameter arg1:被乘数(接受小数和整数)
*@parameter arg2:乘数(接受小数和整数)
*@parameter fix: 乘积保留几位(接受正负整数以及0)
*/
function accMul(arg1,arg2,fix) {
if(!parseInt(fix)==fix)
{
return;
}
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){}
if(m>fix){
return (Math.round(Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m-fix))/Math.pow(10,fix));
}else if(m<=fix){
return (Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(fix);
}else{
return (arg1*arg2).toFixed(fix);
}
}
另外附上 我的测试用例,不全或者有误的地方,欢迎指点批评,谢谢!
document.writeln("3472.45*0.3 = 1041.735 保留2位: "+accMul(3472.45, 0.3,2)+"<br/>");
document.writeln("3472.45*0.3 = 1041.735 保留1位"+accMul(3472.45, 0.3,1)+"<br/>");
document.writeln("3472.45*0.3 = 1041.735 保留0位"+accMul(3472.45, 0.3,0)+"<br/>");
document.writeln("3472.45*0.3 = 1041.735 保留-1位"+accMul(3472.45, 0.3,-1)+"<br/>");
document.writeln("347245*0.3 = 104173.5 保留2位"+accMul(347245, 0.3,2)+"<br/>");
document.writeln("347245*0.3 = 104173.5 保留1位"+accMul(347245, 0.3,1)+"<br/>");
document.writeln("347245*0.3 = 104173.5 保留0位"+accMul(347245, 0.3,0)+"<br/>");
document.writeln("347245*0.3 = 104173.5 保留-1位"+accMul(347245, 0.3,-1)+"<br/>");
document.writeln("347245*3 = 1041735 保留2位"+accMul(347245, 3,2)+"<br/>");
document.writeln("347245*3 = 1041735 保留1位"+accMul(347245, 3,1)+"<br/>");
document.writeln("347245*3 = 1041735 保留0位"+accMul(347245, 3,0)+"<br/>");
document.writeln("347245*3 = 1041735 保留-1位"+accMul(347245, 3,-1)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留3位"+accMul(0.5, 0.3,3)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留2位"+accMul(0.5, 0.3,2)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留1位"+accMul(0.5, 0.3,1)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留0位"+accMul(0.5, 0.3,0)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留-1位"+accMul(0.5, 0.3,-1)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留-2位"+accMul(0.5, 0.3,-2)+"<br/>");
document.writeln("0.5*0.3 = 0.15 保留-3位"+accMul(0.5, 0.3,-3)+"<br/>");
Javascript保证精度的小数乘法的更多相关文章
- javascript保留两位小数
原文地址http://blog.csdn.net/he20101020/article/details/8503308 <script type="text/javascrip ...
- JavaScript 保留两位小数
以下我们将为大家介绍 JavaScript 保留两位小数的实现方法: 四舍五入 以下处理结果会四舍五入: var num =2.446242342; num = num.toFixed(2); // ...
- js(javascript)取float型小数点后两位数的方法
以下我们将为大家介绍 JavaScript 保留两位小数的实现方法:四舍五入以下处理结果会四舍五入: ? 1 2 var num =2.446242342; num = num.toFixed(2); ...
- 【转】javascript 小数乘法结果错误处理
一.用js计算 12.32 * 7 结果是多少? 答案:86.24000000000001 为什么会出现这种问题?怎么解决? js在处理小数的乘除法的时候有一个bug,解决的方法可以是:将小数变 ...
- javascript小数乘法精确率问题
做前端页面开发的经常会遇到数值的乘法计算,带小数位计算会出现值溢出的问题,如: JS里做小数的乘法运算时会出现浮点错误,具体可以测试一下: <script>alert(11*22.9)&l ...
- JavaScript数字精度丢失问题总结
本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 0.1 + 0.2 != ...
- JavaScript数字精度上代码。
/**不能超过 9007199254740992 * floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度 * * 我们知道计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差), ...
- 关于 JavaScript 的 精度丢失 与 近似舍入
一.背景 最近做 dashborad 图表时,涉及计算小数且四舍五入精确到 N 位.后发现 js 算出来的结果跟我预想的不一样,看来这里面并不简单-- 二.JS 与 精度 1.精度处理 首先明确两点: ...
- Javascript 截取2位小数
今天在处理数据时,前台界面金额需要保留两位小数,所以只能使用Javascript 来进行截取. var regex = /([0-9]+\.[0-9]{2})[0-9]*/; var localMon ...
随机推荐
- 初识JAVA——流程控制之if语句
if语句的流程控制主要分为3种:1,单分支结构:if(){……}: 2,双分支结构:if(){……}else{……}; 3,多分枝结构:if(){……}else if(){……}…… 其中作为if语句 ...
- use ECharts with Angular 2 and TypeScript
https://stackoverflow.com/questions/38158318/is-it-possible-to-use-echarts-baidu-with-angular-2-and- ...
- 推荐两个国外公共CDN服务
最近这个国家信息安全问题舆论形势又见紧张,Google的访问又被强力堵截,谷歌的公共CDN也顺带被波及,像AngularJS这样的前卫js库,国内几大公共CDN服务都不提供支持.国外目前两大第三方公共 ...
- (原创)ubuntu 10.04+ruby1.9.2+rails3 安装记录
第一步当然是现在ruby 1.9.2 的sourcecode了,因为现在的ubuntu 源中还没有1.9.2的版本 我下载的是ruby-1.9.2-p290.tar.gz 然后解压到/usr/loca ...
- 关于国际化时报org.springframework.context.NoSuchMessageException错,具体到No message found under code '你的键名' for locale 'zh_CN'.的解决方案
使用IntelliJ IDEA开发工具解决方案: 总结原因,解决方案: 1,在使用messageSource.getMessage方法时,参数1的键名跟属性文件中键名不一致,比如Controller中 ...
- Java自学开发编程路线图(文中有资源福利)
Java 语言入门 免费视频资源<毕向东Java基础教程>:http://yun.itheima.com/course/7.html JavaEE 学习大纲 所处阶段 主讲内容 技术要点 ...
- python3学习笔记1---引用http://python3-cookbook.readthedocs.io/zh_CN/latest/
2018-02-28数据结构和算法(1) 1.1解压序列赋值给多个变量: 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量. 唯一的前提就是变量的数量必须跟序列元素的数量是 ...
- nginx配置 location及rewrite规则详解
1. location正则写法 语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url ...
- Maven的使用
在项目中,我们通常会为项目添加多种多样的依赖包(jar包),去网上下载,然后引入到项目中,很是麻烦. 但是用maven后,这一切都将变得简单起来.由于我的MyEclipse已经集成了maven插件,这 ...
- 架构之高可用性(HA)集群(Keepalived)
Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭 ...