javascript解决小数的加减乘除精度丢失的方案
原文:http://www.jb51.net/article/85463.htm
- 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));
- }
- }
- //乘法
- 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);
- }
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));
}
}
//乘法
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解决小数的加减乘除精度丢失的方案的更多相关文章
- float的精度,3个小数相加后精度丢失--小数比较使用bccomp()方法
$a = 1200.00;$b = 1199.80;$c = 0.1;$u = 0.12; $d = $b+$c+$u;var_dump($a);var_dump($d);var_dump(bccom ...
- JavaScript数字精度丢失问题总结
本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 0.1 + 0.2 != ...
- JavaScript数字精度丢失的一些问题
本文分为三个部分 JS 数字精度丢失的一些典型问题 JS 数字精度丢失的原因 解决方案(一个对象+一个函数) 一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加 1 0.1 + 0.2 ! ...
- JavaScript数字计算精度丢失的问题和解决方案
一.JS数字精度丢失的一些典型问题 1. 两个简单的浮点数相加:0.1 + 0.2 != 0.3 // true,下图是firebug的控制台截图: 看看java的计算结果:是不是让你很不能接受 再来 ...
- Java:利用BigDecimal类巧妙处理Double类型精度丢失
目录 本篇要点 经典问题:浮点数精度丢失 十进制整数如何转化为二进制整数? 十进制小数如何转化为二进制数? 如何用BigDecimal解决double精度问题? new BigDecimal(doub ...
- FastJSON 后端返回Long型 前段精度丢失的问题
解决方法就是将Long型转换为字符串---全局配置方案如下: @Override public void configureMessageConverters(List<HttpMessageC ...
- [转载]JavaScript 中小数和大整数的精度丢失
标题: JavaScript 中小数和大整数的精度丢失作者: Demon链接: http://demon.tw/copy-paste/javascript-precision.html版权: 本博客的 ...
- javascript(js)小数精度丢失的解决方案
原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况. javascript(js)的小数点加减乘除问题,是一个js的bug如0.3* ...
- 关于JavaScript中计算精度丢失的问题
摘要: 由于计算机是用二进制来存储和处理数字,不能精确表示浮点数,而JavaScript中没有相应的封装类来处理浮点数运算,直接计算会导致运算精度丢失. 为了避免产生精度差异,把需要计算的数字升级(乘 ...
随机推荐
- MySQL数据库---索引
索引的作用就是快速找出在一个列上用一特定值的行.如果没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行. 索引的类型: 先写一个建表语句: CREATE TABLE `t ...
- C++图书馆管理系统项目中部分功能代码实现(书籍推荐)
bool UserServiceImpl::Compare1(Book b1,Book b2)//按照借阅次数比较{ if(b1.GetCnt() > b2.GetCnt()) { return ...
- tp5使用外部类的三种方法
在tp5中使用外部类的时候有三种方法 第一种就是通过composer下载,通过这种方式下载的外部类能够支持自动加载,我们只要在使用的时候use一下命名空间就可以使用了 比如:我们的tp5第四季项目要使 ...
- Python中类的声明,使用,属性,实例属性,计算属性及继承,重写
Python中的类的定义以及使用: 类的定义: 定义类 在Python中,类的定义使用class关键字来实现 语法如下: class className: "类的注释" 类的实体 ...
- dict 方法总结整理
#!/usr/bin/env python __author__ = "lrtao2010" #Python 3.7.0 字典常用方法 #字典的key是唯一的,且不能被修改,val ...
- 搜索引擎elasticsearch常用指令演示
目录 交互方式 常用操作示例 添加文档 删除文档 修改文档 查询 简单查询 高级多条件查询 交互方式 操作ES有3种方式: kibana控制台(Dev Tools) Http + json api接口 ...
- HDU:2586-How far away
How far away Time limit1000 ms Memory limit32768 kB Problem Description There are n houses in the vi ...
- hdu 5984
PockyTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submissio ...
- Java获得字节码对象的三种方式
1.Class 类的forName方法 Class clazz = Class.forName("com.test.Test"); 该方法要注意的是会抛出一个ClassNotFou ...
- Linux磁盘分区介绍
分区?我们不是已经在BIOS界面分区好了吗?如果领导给你一块磁盘,你怎么用呢?所以就有了分区工具(fdisk和parted),fdisk工具只针对小于2T磁盘分区,且是交互式的:parted很强大,通 ...