`
fengyie007
  • 浏览: 149311 次
  • 性别: 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版BigDecimal类库

    javascript的数值精确计算类bigdecimal,改编自java的bigdecimal

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

    代码如下: (function () { var calc = { /* 函数,加法函数,用来得到精确的加法结果 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 参数:arg1:第一...

    JavaScript笔记

    精确查找某个ID的元素:document.getElementById(id名); 9.null和undefined: |--null:一个特殊的值,表示“无值”--空对象。数据类型为Object |--undefined:表示声明了变量但从未赋值或者对象属性不存在 10...

    double.js:javascript中的double-double运算。 具有31个精确十进制数字的浮点扩展

    例如,在轨道力学,计算几何和数值不稳定算法中,例如执行三角剖分,多边形修剪,求逆矩阵和求微分。 算法 数字存储为两个javascript浮点数的未计算总和,并使用无错误的算术算法。 与这种方法相比,这带来了准确性...

    double.js:javascript 中的双双算术。 具有 31 个精确十进制数字的浮点扩展

    例如在轨道力学、计算几何和数值不稳定算法中,例如执行三角剖分、多边形裁剪、矩阵求逆和求微分。算法数字存储为两个 javascript 浮点数的未评估总和,并使用无错误算术算法。 与数字方式方法相比,这带来了准确性...

    JavaScript大数相加相乘的实现方法实例

    JavaScript 中的最大安全整数是 2 ^{53} – 1 ,即 9007199254740991,当我们进行超出这个范围的数值计算的时候就无法得到精确的值,而是一个近似值,比如我们计算 9007199254740991 + 10 得到的结果是 ...

    js中Number数字数值运算后值不对的解决方法

    问题: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 ...//除法函数,用来得到精确的除法结果 //

    richardson-extrapolation:使用Richardson Extrapolation序列加速来计算收敛阶数和序列的精确值

    理查森外推法 使用Richardson Extrapolation序列加速来计算收敛阶数和序列的精确值介绍是一种使用小参数多个值的解的数值方法 (思考: =网格大小)以加快序列的收敛速度。 为了使具体,考虑一种方法 近似于 。 写成...

    python项目基于图像识别的仪表实时监控系统.zip

    3. **读数解析**:采用图像处理技术如边缘检测、霍夫变换等来精确定位指针位置,并将视觉读数转换为具体数值。 4. **异常报警**:当系统检测到读数超出预设的正常范围时,可以发出警报或通知维护人员。 5. **数据...

    解决js浮点数运算的精度问题

    在javascript中进行运算的时候经常会出现浮点数的问题,导致运算结果不准确 比如:0.1 + 0.2 = 0.30000000000000004 完整demo及解决方案如下: demo .num-tags, .total-tag { text-align: center; } i { ...

    python项目基于机器学习的文本情感系统.zip

    2. **特征提取**:使用NLP技术如词袋模型(Bag of Words)、TF-IDF或Word2Vec将文本转换为机器学习算法可处理的数值特征。 3. **情感分类模型**:构建并训练情感分类模型,如支持向量机(SVM)、随机森林或深度学习...

    SQL查询安全性及性能优化

    来自数据库的统计信息,统计信息月准确,执行计划月精确 说明:网络经验:后者效率高于前者,但是以上两个查询语句的性能通过查询计划可以看出其实是一样的,后者不比前者性能好。可能是SQLServer的后期版本进行...

    freemarker总结

    =两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比 较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 ...

Global site tag (gtag.js) - Google Analytics