对小数的运算很多时候由于精度问题导致结果不是我们想要的,当然还有各个browser的差异性.
function paddingRight(val, length, char){
val = String(val || "");
if(val.length >= length){
return val.substr(0, length);
}
return val + new Array(length - val.length + 1).join(char);
}
/**
*精度
*/
function toFixed(precision){
var value = this;
if(isNaN(value)){
return value;
}
precision = precision || 0;
var array = String(value).split(".");
var integral = array[0];
var fraction = array[1] || "";
if(fraction.length > precision){
if(fraction.charAt(precision) >= '5'){
fraction = (fraction.substr(0, precision) * 1 + 1) + "";
}else{
fraction = fraction.substr(0, precision);
}
}else{
fraction = paddingRight(fraction, precision, '0')
}
if(fraction * 1 >= Math.pow(10, precision)){
integral = (integral * 1 + (integral < 0 ? -1 : 1)) + "";
fraction = fraction.substr(fraction.length - precision, precision);
}
return integral + (precision == 0 ? "" : ("." + fraction));
}
/**
* 加法
*/
function add(num){
var array1 = this.toString().split(".");
var array2 = num.toString().split(".");
var f1 = (array1[1] || "").length;
var f2 = (array2[1] || "").length;
var base = Math.max(f1, f2);
var num1 = (array1[0] + paddingRight(array1[1], base, '0')) * 1;
var num2 = (array2[0] + paddingRight(array2[1], base, '0')) * 1;
return (num1 + num2) / Math.pow(10, base);
}
/**
* 减法
*/
function subtract(num){
return this.add(-num);
}
/**
* 乘法
*/
function multiply(num){
var array1 = this.toString().split(".");
var array2 = num.toString().split(".");
var f1 = (array1[1] || "").length;
var f2 = (array2[1] || "").length;
var base = f1 + f2;
num1 = (array1[0] + (array1[1]||"")) * 1;
num2 = (array2[0] + (array2[1]||"")) * 1;
return (num1 * num2) / Math.pow(10, base);
}
/**
* 除法
*/
function divide(num){
var array1 = this.toString().split(".");
var array2 = num.toString().split(".");
var f1 = (array1[1] || "").length;
var f2 = (array2[1] || "").length;
var base = Math.max(f1 + f2);
num1 = (array1[0] + paddingRight(array1[1], base, '0')) * 1;
num2 = (array2[0] + paddingRight(array2[1], base, '0')) * 1;
return num1 / num2;
}
/**
* 求余
*/
function mod(num){
var array1 = this.toString().split(".");
var array2 = num.toString().split(".");
var f1 = (array1[1] || "").length;
var f2 = (array2[1] || "").length;
var base = Math.max(f1 + f2);
num1 = (array1[0] + paddingRight(array1[1], base, '0')) * 1;
num2 = (array2[0] + paddingRight(array2[1], base, '0')) * 1;
var quotient = num1 / num2;
if(quotient == parseInt(quotient)){
return 0;
}
return (num1 - num2 * quotient.toString().split(".")[0]) / Math.pow(10, base);
}
//加入到Number.prototype中
$(function(){
Number.prototype.toFixed = toFixed;
Number.prototype.add = add;
Number.prototype.subtract = subtract;
Number.prototype.multiply = multiply;
Number.prototype.divide = divide;
Number.prototype.mod = mod;
});
分享到:
相关推荐
JavaScript中的数学运算主要涵盖基本算术运算和使用Math对象的高级计算。JavaScript支持常见的加法(+), 减法(-), 乘法(*), 除法(/)以及取模(%)运算符。此外,它还提供了处理特殊计算结果的能力,如正负Infinity和NaN...
在JavaScript编程语言中,实现除法运算检验是一个重要的任务,特别是在进行数学计算或者验证用户输入时。这个过程涉及到了对浮点数处理、错误处理、以及条件判断等多个方面。下面我们将详细探讨如何在JavaScript中...
对于四则运算,可以创建一个函数,接收两个数字和运算符作为参数,根据运算符执行相应的数学操作。例如: ```javascript function calculate(num1, num2, operator) { switch (operator) { case '+': return num...
JavaScript 中 Number 数字数值运算后值不对的解决方法 在 JavaScript 中,对浮点数的运算可能会出现精度问题,例如 `37.5*5.5` 的结果可能不是期待的 `206.08`,而是 `206.08499999999998`。这是因为 JavaScript ...
这个示例中,当用户点击“加法”按钮,JavaScript会获取两个输入框的值,进行加法运算,并将结果显示在页面上。 总的来说,“JavaScript实现算术运算算子演示系统”是一个集成了JavaScript、HTML5和CSS3技术的项目...
这个“jQuery随机数字运算验证码”是一个使用jQuery库实现的特定功能,它结合了JavaScript和ECMAScript的技术来生成含有数学运算的随机数字验证码。下面将详细解释相关知识点。 1. jQuery库:jQuery是一个轻量级、...
在字符串数学运算中,JavaScript发挥着关键作用。它能捕获用户输入,对字符串进行处理,比如将字符串转换为数值,执行加减乘除等数学运算,并将结果显示回页面。JavaScript还提供了正则表达式,用于验证和清洗输入的...
### JavaScript避免数字计算精度误差的方法详解 #### 一、引言 在JavaScript中进行浮点数运算时,经常会出现精度误差的问题。例如,一个简单的加法运算 `0.1 + 0.2` 的结果并不是预期中的 `0.3`,而是 `0....
在JavaScript中,数学运算主要分为两大类,一类是通过基本运算符实现的,另一类是通过Math对象提供的计算函数实现的。下面详细介绍这两类数学运算的使用方法及特殊值的处理。 ### 基本运算符 JavaScript中的基本...
在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。 一、熟悉概念 中缀表示法(或中缀记法)是一个通用的算术或逻辑公式表示方法, ...
在JavaScript中,括号用于改变运算顺序,表达式`a * (b + c)`会先计算括号内的`b + c`,然后将结果与`a`相乘。乘方运算(**)的优先级高于乘法和除法,而加法和减法的优先级相同,从左到右进行计算。求余运算(%)是...
在JavaScript编程中,处理数学运算和相关计算是常见需求。Math对象是JavaScript中的一个全局对象,它提供了一系列的数学常数和函数,用于执行各种数学计算。这些方法包括基本的算术运算、三角函数、指数和对数运算等...
例如,当用户点击数字或运算符按钮时,JavaScript会捕获这些事件,更新屏幕上的显示,并将计算指令添加到内存中的表达式。对于加减乘除,JavaScript的内建运算符可以直接处理。对于连续的运算,可能需要使用括号和...
在JavaScript编程中,对数运算是一项基础且重要的数学操作,尤其在处理图形、科学计算以及数据分析等场景中不可或缺。对数运算与指数运算互为逆运算,它可以帮助我们解决复杂问题,例如简化计算、理解数据的增长模式...
值得注意的是,当非数字类型参与数学运算时,JavaScript会进行隐式类型转换,将这些非数字值转换为数字类型后再执行运算。例如,字符串"123"会被转换为数字123,而`true`会转换为1,`false`、`null`、空字符串或空白...
这种随机数字运算验证码比简单的图像验证码更难被自动化程序破解,因为它们需要解决数学问题,而不仅仅是识别图像。 随机数生成通常使用JavaScript的Math对象,该对象提供了多种方法,如`Math.random()`,可以生成...
计算器是一种 electronic device 或 software application,用于进行数学运算。计算器可以是简单的加减乘除运算,也可以是复杂的科学计算、金融计算等。 JavaScript 在计算器中的应用 JavaScript 是一种广泛应用于...
我们使用了replace方法来将非数字字符替换为空字符串,从而限制用户只能输入数字。 HTML结构 在本资源中,我们使用了HTML来创建文本框和按钮。我们使用了input标签来创建文本框,并使用了onkeyup事件来触发计算...