javascript解决小数的加减乘除精度丢失的方案
2024-08-30 06:11:38
原文: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);
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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);
}
最新文章
- Java面试常见知识点总结(三)
- oracle 用户与表空间关系
- JSTL中fmt标签详解
- XML的解析方式(Java)
- MyEclipse导入Maven项目
- java 多线程 CountDownLatch用法
- 适合高级Java程序员看的12本书
- Android菜鸟的成长笔记(7)——什么是Activity
- JavaScriptConvert.SerializeObject转换出错
- 【mysql】关于InnoDB表text blob大字段的优化
- mysql中对字符集和校对规则的认识
- Redis进阶实践之三如何在Windows系统上安装安装Redis
- PGM:不完备数据的参数估计
- 优化之Sequence Generator组件
- adb相关指令 笔记
- DELL 服务器报CPU 1 has an internal error (IERR)
- sqlalchemy学习笔记
- MySQL数据库索引之B+树
- 【zigbee 】2.4G信号发放器 AT2401C PA功放
- jota-time 练习