`
fengyie007
  • 浏览: 153052 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript数值精确计算

阅读更多
/**
* The function for decimal's add, subtract, multiplication, division. Not get the float result.
 * And add the function to Number's prototype, so you can use it as:
 * var result = dcmAdd(0.2,0.1); //or var result = (0.2).add(0.1);
 * */
function floatAdd(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
	}
	n = Math.max(r1, r2); // (不加这个还是有问题,如68.04+16.17,因为在下面的arg1*m时会出现浮点数,
	m = Math.pow(10, n);
	// 当然也可以用dcmMul(arg1,m)来解决,但考虑到效率还是加这个吧。)
	return ((arg1 * m + arg2 * m) / m).toFixed(n);
}

function floatSbt(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
	}
	n = Math.max(r1, r2);// (不加这个还是有问题,如68.04-16.17)
	m = Math.pow(10, n);
	return ((arg1 * m - arg2 * m) / m).toFixed(n);
}

function floatMul(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 floatDiv(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) {
	}
	r1 = Number(arg1.toString().replace(".", ""));
	r2 = Number(arg2.toString().replace(".", ""));
	return (r1 / r2) * Math.pow(10, t2 - t1);
};

Number.prototype.succ = function() {
	return this + 1;
},

Number.prototype.add = function(arg) {
	return floatAdd(this, arg);
},

Number.prototype.sub = function(arg) {
	return floatSbt(this, arg);
},

Number.prototype.mul = function(arg) {
	return floatMul(this, arg);
},

Number.prototype.div = function(arg) {
	return floatDiv(this, arg);
}
Number.prototype.succ = function() {
	return this + 1;
},

String.prototype.add = function(arg) {
	return floatAdd(this, arg);
},

String.prototype.sub = function(arg) {
	return floatSbt(this, arg);
},

String.prototype.mul = function(arg) {
	return floatMul(this, arg);
},

String.prototype.div = function(arg) {
	return floatDiv(this, arg);
}


 
分享到:
评论

相关推荐

    JavaScript小数点精确计算

    JavaScript中的小数点精确计算是开发者经常会遇到的一个挑战。由于JavaScript内部使用的是IEEE 754标准来存储和处理浮点数,这可能导致在进行小数运算时出现精度丢失问题,尤其是在涉及大数字或者循环计算时。本篇将...

    JavaScript 精确计算(2)

    在JavaScript编程语言中,精确计算是一项重要的需求,特别是在金融、科学计算或任何需要高精度数值操作的场景。由于JavaScript的内置Number类型使用浮点数表示,这可能导致在进行大数运算时出现微小的误差。标题...

    test_JS-数字精确计算_

    1. **使用整数代替浮点数**:在处理金钱或需要精确计算的场景下,可以将数值转换为整数的倍数(例如,用分表示元),然后进行整数运算,这样可以避免浮点数精度问题。 2. **使用字符串表示法**:将数字存储为字符串...

    js关于精确计算和数值格式化以及直接引js文件

    在JavaScript编程中,处理浮点数的精确计算和数值格式化是开发者常常需要面对的两个问题。由于JavaScript内部使用IEEE 754标准的双精度浮点数进行运算,当涉及到小数运算时很容易出现精度丢失,因此需要通过特定的...

    JavaScript程序设计课件:数值型.pptx

    然而,需要注意的是,JavaScript使用IEEE 754双精度浮点数格式,这意味着它不能精确地表示所有的整数,尤其是在大数值范围内。 此外,JavaScript还包含一些特殊的数值值,如Infinity表示正无穷大,-Infinity表示负...

    JavaScript中的数值范围介绍

    在实际开发中,开发者可能会遇到超出JavaScript数值精度范围的情况,这通常发生在处理大数字或者需要高精度数值计算的场景中,例如金融计算、科学计算等。在这些情况下,JavaScript的计算错误可能会导致程序出现逻辑...

    javascript版BigDecimal类库

    本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 JavaScript版的`BigDecimal`类库是基于Java原版`BigDecimal`的改编,旨在提供与Java版本相似的功能,以支持大整数和任意...

    JavaScript与MATLAB的计算性能差异对比研究.pdf

    在进行对比研究时,我们主要分析了JavaScript和MATLAB在数值数据类型上的特点,并通过不同迭代次数和不同计算机配置环境下的测试,得出了JavaScript在迭代计算结果方面比MATLAB更加精确,同时其运行速度也更快的结论...

    javascript计算器

    这些库可以用于进行需要精确计算的场景。 3. **数学技巧**:对于特定的运算,比如求和,可以使用累加器变量,每次只加上一个较小的数值,这样可以减少精度损失的影响。 4. **避免直接比较**:在进行浮点数比较时,...

    详解js加减乘除精确计算

    JavaScript中的加减乘除运算在处理浮点数时可能会出现精度丢失的问题,这是由于计算机内部存储和计算浮点数的方式导致的。...在遇到需要精确计算的JavaScript代码时,调用这些函数替代原生的加减乘除操作即可。

    The JavaScript Anthology.pdf

    对于那些需要进行精确计算或数据处理的开发者来说,这部分内容尤为重要。 #### 3. 处理字符串 字符串操作是任何编程语言中的基本功能之一。本章详细讲解了字符串的创建、检索、修改和搜索方法,以及正则表达式的...

    JavaScript前端开发时数值运算的小技巧

    在JavaScript前端开发中,数值运算是一个非常基础且重要的部分。本文将详细介绍一些在数值运算中常用的技巧和方法,包括格式化金钱值、取整、转数值、精确小数、取最小最大值、判断是否为空对象、判断数据类型、克隆...

    JavaScript计算器

    JavaScript提供了DOM(Document Object Model)API来操作HTML元素,例如,可以使用`document.getElementById`或`document.querySelector`获取元素,然后修改其`value`属性来更新显示的数值。 此外,JavaScript的...

    javascript实现动态时钟

    此外,为了使时钟持续更新,我们需要在JavaScript中设置一个定时器,每隔一定时间(比如1秒)重新计算并更新指针的角度: ```javascript setInterval(function() { // 更新时间并计算角度 // ... // 更新CSS //...

    JS 能表示的最大数值及JS Number类型数字位数及IEEE754标准1

    JavaScript中的Number类型是基于IEEE 754标准的双精度浮点数(double...了解这些限制对于编写高精度的代码至关重要,特别是在金融计算和其他需要精确数值操作的场景中。在必要时,可以使用特定库或算法来补偿精度损失。

    js_bigdecimal_1_0_1.zip

    同时,大数计算可能会比常规的JavaScript数值计算更消耗性能,因此在不需要高精度的情况下,应尽量避免使用。 总的来说,"js_bigdecimal_1_0_1.zip"为JavaScript开发者提供了一种解决大数精度问题的工具,使得在Web...

    JavaScript内置对象属性及方法大全

    - **`toPrecision(precision)`**:返回一个表示该数值的精确度为precision的字符串。 - **`valueOf()`**:返回该Number对象的原始值。 通过以上内容,我们可以看到JavaScript中内置对象的强大功能,这些对象为...

Global site tag (gtag.js) - Google Analytics