javascript小数精度丢失的完美解决方法

 更新时间:2016年05月31日 09:10:17   投稿:jingxian  
下面小编就为大家带来一篇javascript小数精度丢失的完美解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况.

javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法

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 accMul((r1/r2),pow(10,t2-t1));  
 }  
 }  /* 何问起 hovertree.com */
 //乘法 
 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)  
 }  
//加法  
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  
}  
//减法  
function Subtr(arg1,arg2){ 
  var r1,r2,m,n; 
  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; 
  return ((arg1*m-arg2*m)/m).toFixed(n); 
}

以上这篇javascript小数精度丢失的完美解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 深入理解javascript prototype的相关知识

    深入理解javascript prototype的相关知识

    这篇文章主要介绍了深入理解javascript prototype的相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 一文详解JS私有属性的6种实现方式

    一文详解JS私有属性的6种实现方式

    class是创建对象的模版,由一系列属性和方法构成,用于表示对同一概念的数据和操作。有的属性和方法是对外的,但也有的是私有的。本文梳理了六种私有属性的实现方式,需要的可以参考一下
    2022-03-03
  • javaScript中一些常见的数据类型检查校验

    javaScript中一些常见的数据类型检查校验

    最近在面试的时候又被问到JS中检查校验数据类型的方法,所以这篇文章主要给大家介绍了关于javaScript中一些常见的数据类型检查校验的相关资料,需要的朋友可以参考下
    2022-05-05
  • 小程序实现手写板签名

    小程序实现手写板签名

    这篇文章主要为大家详细介绍了小程序实现手写板签名,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 比较不错的函数式JavaScript编程指南教程

    比较不错的函数式JavaScript编程指南教程

    你是否知道JavaScript其实也是一个函数式编程语言呢?本指南将教你如何利用JavaScript的函数式特性。
    2008-05-05
  • Typescript的三种运行方式(小结)

    Typescript的三种运行方式(小结)

    这篇文章主要介绍了Typescript的三种运行方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 微信小程序授权登陆及每次检查是否授权实例代码

    微信小程序授权登陆及每次检查是否授权实例代码

    这篇文章主要介绍了关于微信小程序授权登陆及每次检查是否授权,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • HTML+JS实现经典推箱子游戏

    HTML+JS实现经典推箱子游戏

    今天,这篇文章将利用HTML,CSS,JS的知识编写一个童年经典游戏 - 推箱子,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-11-11
  • 详解ajax、fetch、axios的区别

    详解ajax、fetch、axios的区别

    本文主要介绍了详解ajax、fetch、axios的区别,众所周知它们都用来发送请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 原生js实现百叶窗效果及原理介绍

    原生js实现百叶窗效果及原理介绍

    这篇文章主要介绍了原生javascript实现百叶窗效果的方法及原理介绍,感兴趣的小伙伴们可以参考一下
    2016-04-04

最新评论