- 浏览: 40273 次
/**
* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
* @param num1加数1 | num2加数2
*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
/**
* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
* @param num1被减数 | num2减数
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// 精度
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
};
/**
* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
* @param num1被乘数 | num2乘数
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split(".")[1].length;
} catch (e) {
}
try {
baseNum += num2.toString().split(".")[1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};
/**
* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
* @param num1被除数 | num2除数
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", ""));
baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
}
};
* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
* @param num1加数1 | num2加数2
*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
/**
* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
* @param num1被减数 | num2减数
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// 精度
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
};
/**
* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
* @param num1被乘数 | num2乘数
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split(".")[1].length;
} catch (e) {
}
try {
baseNum += num2.toString().split(".")[1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};
/**
* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
* @param num1被除数 | num2除数
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", ""));
baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
}
};
发表评论
-
复选框反现
2016-06-02 16:11 402//单个项目</br>投资金额othqualiat ... -
js用remove删除数组,提示remove是“undefined”,解决方案
2015-08-13 16:09 1486js用remove删除数组,提示remove是“undefin ... -
JS返回上一页并刷新
2014-09-16 20:15 674//JS返回上一页并刷新 <script type=&q ... -
JS全选全不选取值
2014-03-26 10:57 655function selectAll(flag){ va ... -
JS 时间转换
2014-03-08 11:22 493function formatDate(date, forma ... -
Select下拉列表框进行多选、移除、交换内容(包括修改反显)
2014-01-07 16:38 2137<!DOCTYPE HTML PUBLIC " ... -
ajax跨域请求
2014-01-03 15:34 668opurl = synInfo.action?proId=1& ... -
textarea 必填校验,地址栏传值乱码问题
2013-12-31 12:00 1444<%@ page language="java ... -
表单修改时复选框和下拉列表反显
2013-12-05 01:02 2693//单个项目</br>投资金额othqualiat ... -
ajax跨域请求
2013-11-19 00:38 0$.ajax({ type: "GET&quo ... -
DOM对象转换成jQuery对象转换与子页面获取父页面DOM对象
2013-11-18 21:03 615一:模态窗口 //父页面JS window.showModa ... -
JQuery中easyui获取tab页对象以及获取tab页对象下的iframe对象和指定tab页对象隐藏
2013-11-16 09:50 1863$('#mytabs').tabs( { onSelec ... -
Dialog参数使用+子页面获取父页面值
2013-08-05 19:45 4695window.showModalDialog(url, win ... -
jquery combobox下拉列表多选非正常反显
2013-03-28 11:09 897combobox下拉列别多选反显,存储到后台数据库的value ... -
jquery下拉列表四级快速反显
2013-03-28 11:05 1732前台: $('#source').combotree({ ... -
jQuery 事件 - preventDefault() 方法
2012-10-08 09:36 768<html> <head> <s ... -
$(document).ready(function()
2012-10-08 09:30 769$(document).ready(function() 页 ... -
event.srcElement.tagName
2012-09-13 17:04 682<SCRIPT> function fun() ...
相关推荐
基于上述原因,以下是介绍如何解决在JavaScript中处理小数加减乘除时精度丢失问题的四种方法: 1. 乘法(accMul)函数:此函数通过计算两个数的小数部分的位数,然后相乘后除以10的幂次方来调整结果,以此来解决...
### JavaScript 解决小数加减乘除精度丢失的方案 #### 一、引言 在JavaScript中处理小数运算时,经常会遇到一个令人头疼的问题——精度丢失。这主要是因为JavaScript中的数字采用IEEE 754标准下的双精度64位浮点数...
使用示例: math.config({ number:'BigNumber' }) let result=math.parser().eval(a+ "-" + b); //a,b是需要计算的值,中间是运算符
JavaScript中的加减乘除运算在处理浮点数时可能会出现精度丢失的问题,这是由于计算机内部存储和计算浮点数的方式导致的。浮点数在计算机内存中是以二进制表示的,某些十进制小数转换成二进制时无法精确表示,从而...
此外,为了方便使用,文档还扩展了 `String` 类型,添加了 `div` 和 `mul` 方法,使得可以直接对字符串形式的数字调用这些自定义的加减乘除操作,比如 `var result = "12.34".div("5.67")`。 总结来说,这个实例...
### JavaScript中的精确加减乘除运算 在JavaScript中进行数学计算时,经常会出现精度丢失的问题,尤其是在处理小数运算时尤为明显。这是因为JavaScript中的数字是以双精度浮点数(64位)形式存储的,遵循IEEE 754...
在JavaScript中,进行基本的数学运算如加、减、乘、除是相当直观的,但当我们处理浮点数时,可能会遇到精度问题。这个文档提供了一些简洁的实例,通过自定义函数来解决浮点数计算时可能出现的精度丢失问题。 首先,...
以上方法的共同原理是在进行小数运算前,先确定涉及数值的小数位数,然后根据最大或最小的小数位数来对数值进行放大或缩小,以保证在进行加减乘除运算时,所有的计算都是基于整数进行的,避免了直接对小数进行运算而...
总结一下,JavaScript中的加减乘除运算可能由于浮点数的表示方式而存在精度问题。为了克服这个问题,可以编写自定义函数,如`accDiv`、`accMul`、`accAdd`和`accSubtr`,它们通过计算小数位数并使用`Math.pow()`来...
其实在我们使用正常的 + - * / 运算时,在某些情况下就会出现精度丢失的问题,如金额过大时,单纯的加减都有可能出现精度丢失,对于银行项目来说,是很敏感的,需要对每个加减乘除都进行一次方法处理,为此我整理...
在JavaScript中,进行浮点数的加减乘除运算时,由于计算机内部的二进制表示方式,常常会出现精度问题,导致计算结果与预期不符。为了解决这个问题,我们可以采用自定义函数的方式来实现精确的计算。以下是一个详细的...
在JavaScript编程中,...总结起来,floatOPS.js是一个专注于解决JavaScript中浮点数运算精度问题的插件,通过提供加减乘除四个方法,确保了在进行浮点数运算时的精度,对于需要精确计算的场景具有很高的实用价值。
如果不想引入新的库,也可以编写自定义函数来处理大整数的加减乘除等运算。 3. **服务器端处理**:尽可能地将数值计算和处理工作交给后端,避免在前端进行可能引起精度损失的操作。例如,可以将角色ID作为字符串...
BigInteger库正是为了解决这个问题,它提供了在JavaScript中操作大整数的能力,支持加减乘除、比较、模运算等多种数学运算。 BigInteger库通常用于需要处理超出JavaScript原生数据类型限制的场景,比如加密算法、...
1. **大数加减乘除**:支持两个大数之间的加法、减法、乘法和除法操作,确保结果的精度不受影响。 2. **比较操作**:可以比较两个大数的大小,支持等于、小于、大于等关系判断。 3. **格式化输出**:提供格式化数字...
由于JavaScript内部使用IEEE 754标准存储和处理浮点数,这可能导致精度损失,尤其是在进行加减乘除等数学运算时。标题"test_JS-数字精确计算_"暗示我们将讨论如何在JavaScript中实现对小范围数字的精确计算。 描述...
《深入理解JavaScript中的大数运算库bignumber.js》 在JavaScript中,处理大数(超过Number.MAX...无论是简单的加减乘除,还是复杂的数学运算,bignumber.js都能游刃有余,是金融、科学计算等领域开发者不可或缺的库。