黄聪:JS数学计算精度修正
问题描述
如果我问你,4330.61乘以100等于多少,我猜你肯定跟我说:“肯定是 433061”啊!
是啊,要我我也是这么回答,来来来我们来看看浏览器怎么说吧,如下图

偌!浏览器告诉我,他就是算不对,这要是给客户算钱,客户不就有意见了....
WHY?计算机计算出来的还不如我自己的心算呢!!!!
如果你想了解什么原因,您请看=>js浮点数精度问题的前世今生?
解决办法
;(function(){
function mathService(){
this.add=function(a,b){
var c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) + this.mul(b, e)) / e;
}
this.mul=function(a, b) {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
this.sub=function(a,b){
var c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
return e = Math.pow(10, Math.max(c, d)), (this.mul(a, e) - this.mul(b, e)) / e;
}
this.div=function(a, b) {
var c, d, e = 0,
f = 0;
try {
e = a.toString().split(".")[1].length;
} catch (g) {}
try {
f = b.toString().split(".")[1].length;
} catch (g) {}
return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), this.mul(c / d, Math.pow(10, f - e));
}
}
window.mathService=new mathService()
})(window);
来来来,用起来

Ok!写完收工!!!
作者:小枫学幽默
链接:https://www.jianshu.com/p/c3374517b976
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
黄聪:JS数学计算精度修正的更多相关文章
- JS数字计算精度误差的解决方法
本篇文章主要是对javascript避免数字计算精度误差的方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 如果我问你 0.1 + 0.2 等于几?你可能会送我一个白眼,0.1 + 0. ...
- 关于js浮点数计算精度不准确问题的解决办法
今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一直碰到这个问题,都是简单的使用tofixed方法进行处理一下,这对于一个程序员来说是及其不严谨的.因此在网上收集了一些处理浮点数精 ...
- 学以致用:手把手教你撸一个工具库并打包发布,顺便解决JS浮点数计算精度问题
本文讲解的是怎么实现一个工具库并打包发布到npm给大家使用.本文实现的工具是一个分数计算器,大家考虑如下情况: \[ \sqrt{(((\frac{1}{3}+3.5)*\frac{2}{9}-\fr ...
- JS数字计算精度问题解决
add(a, b) {//相加 var c, d, e; try { c = a.toString().split(".")[1].length; } catch (f) { c ...
- js 浮点数计算精度不准确问题
或许很多人都遇到过,js 对小数的加.减.乘.除时经常得到一些奇怪的结果! 比如 :0.1 + 0.2 = 0.3 ? 这么一个简单的计算,当你用js 计算时会发现结果是:0.30000000000 ...
- 如何避开JavaScript浮点数计算精度问题(如0.1+0.2!==0.3)
不知道大家在使用JS的过程中有没有发现某些浮点数运算的时候,得到的结果存在精度问题:比如0.1 + 0.2 = 0.30000000000000004以及7 * 0.8 = 5.60000000000 ...
- vue js计算精度问题处理,兼容XP系统
js计算精度问题(浮点数误差,大数计算出错) JavaScript 运算时经常遇到会 0.000000001 和 0.999999999 这样奇怪的结果. 网上教程一大篇,原理请百度,抄作业往下看!! ...
- JS对象 神奇的Math对象,提供对数据的数学计算。注意:Math 对象是一个固有的对象,无需创建它,直接把 Math 作为对象使用就可以调用其所有属性和方法。这是它与Date,String对象的区别
Math对象 Math对象,提供对数据的数学计算. 使用 Math 的属性和方法,代码如下: <script type="text/javascript"> var m ...
- js浮点数计算(加,减)
最近工作中经常遇到需要处理浮点型计算的问题,开始一直都在用把浮点数先乘以10的对应小数的位数的次方化成整数再去开始计算. 例如100.01+100.02,可以化成(100.01*100+100.02* ...
随机推荐
- [uva P1601] The Morning after Halloween
[uva P1601] The Morning after Halloween 题目链接 非常经典的一道题目,lrj的书上也有(貌似是紫书?). 其实这题看起来就比较麻烦.. 首先要保证小鬼不能相遇, ...
- 匿名函数lambda及面试题三道
# 函数名 = lambda 参数 :返回值. 匿名函数只是函数,如果要通过可迭代对象给匿名函数传参,就需要使用 map 或者 filter calc = lambda n:n**n calc(1)c ...
- 点击事件target
1.场景:需要写一个弹出框来容纳登录界面,类似于百度的登录框 问题:使用 display: none/block 进行弹出框的显示和隐藏,设立点击事件 onclick 进行触发,但是点击 ...
- java将所有的字符串转换为大写或小写
public class DaXie { public static void main(String[] args) { /**将所有的字符串转换成大写或小写字母并打印出来*/ String str ...
- weinre 远程调试 安装 配置
1.第一种方法:安装:npm install -g weinre 2.第一种方法:开启本地监听服务器(修改端口,默认端口是8080):在cmd中运行: weinre --httpPort 8101 - ...
- 50个常用的Linux命令(三)基础实例
ls ls -als -l == llls -Aldrwxrwxrwx. 2 root root 6 Dec 21 20:38 Videos-rwxrwxrwx 1 root ...
- 用mybatis中的insert方法插入数据,返回值为1,但数据库却没有数据
刚才在写东西的时候,用mybatis中的 <insert id="add" parameterType="cn.entity.Computer"> ...
- 黄金点游戏 结队i项目
结对编程——黄金点游戏 本次的结对编程的项目是黄金点游戏,我的结对对象是冯雨倩,我们的编程能力都不太好,而且都对C语言更熟悉些,因此我们决定用C语言来实现. (1)分工:角色分配:冯雨倩是领航员, ...
- [SQL]Temporal 异常处理经验
解决20762 Module 3 课程关于Temporal Table 在 Demo 时的错误 首先该Demo 主要是搭配AdvantureWorks2016 的资料库,使用Person.Person ...
- C#磁性窗体设计
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...