JS操作数字

首先要了解JS中几个内置函数的区别。

1.Number()、parseInt()、parseFloat()的区别: 

parseInt()和parseFloat()方法只转换第一个无效字符之前的字符串。如"12.34.56"被转换成"12.34。

Number()的强制类型转换与parseInt()和parseFloat()方法的处理方式相似,只是它转换的是整个值,而不是部分值。用Number()进行强制类型转换将返回NAN, 如果字符串值能被完整地转换,Number()将判断是调用parseInt()还是parseFloat()。

 

测试代码:

<input type="text" id="numberInput" /> 
<input type="button" value="Number()"
onclick="javascript:alert(Number(document.getElementById('numberInput').value));return false" />
<p></p>
<input type="text" id="parseIntInput" />
<input type="button" value="parseInt()" 
onclick="javascript:alert(parseInt(document.getElementById('parseIntInput').value));return false;" />
<p></p>
<input type="text" id="parseFloatInput" />
<input type="button" value="parseFloat()" 
onclick="javascript:alert(parseFloat(document.getElementById('parseFloatInput').value));return false;" />

var num = "88.88abc888";
document.write(Number(num));                    //NaN
document.write(parseFloat(num));                //88.88
document.write(parseFloat(Number(num)));        //NaN

 

2.Number.toFixed(x) 、 Number.toPrecision(x) 、 Math.Round(x)的区别: 

都有四舍五入的功能。

Number.toFixed(x) 是将指定数字截取小数点后 x 位。

Number.toPrecision(x) 是将整个数字截取指定 x 长度。

注意:一个是计算小数点后的长度,一个是计算整个数字的长度 。 

Math.round(x) 方法把 x 舍入为最接近的整数。

 

测试代码:

<input type="text" id="toFixedInput" /> 
<input type="button" value="toFixed(2)"
onclick="javascript:alert(Number(document.getElementById('toFixedInput').value).toFixed(2));return false;" />
<p></p>
<input type="text" id="toPrecisionInput" />
<input type="button" value="toPrecision(2)" 
onclick="javascript:alert(Number(document.getElementById('toPrecisionInput').value).toPrecision(2));return false;" />
<p></p>
<input type="text" id="roundInput" />
<input type="button" value="round()" 
onclick="javascript:alert(Math.round(Number(document.getElementById('roundInput').value)));return false;" />
<p></p>

var num = 123.456;    
document.write(num.toFixed(1));                 // 123.5    
document.write(num.toPrecision(2));             // 1.2e+2  
document.write(num.toPrecision(3));             // 123     
document.write(Math.round(-4.60));              // -5   
document.write(Math.round(num * 10) / 10);      // 123.5    
document.write(Math.round(num * 100) / 100);    // 123.46 

   

小数操作:

// 将浮点数四舍五入,取小数点后2位
function formatFloat(x) {    
    var f = Number(x);    
    if (isNaN(f)) 
        return;    
    
    f = Math.round(x*100)/100;    
    return f;    
}    


// 保留2位小数,不足补0
function formatFloat(x) {    
    var f = Number(x);    
    if (isNaN(f))     
        return false;    
       
    var f = Math.round(x*100)/100;    
    var s = f.toString();    
    var rs = s.indexOf('.');    
    if (rs < 0) {    
        rs = s.length;    
        s += '.';    
    }    
    while (s.length <= rs + 2) {    
        s += '0';    
    }    
    return s;    
}

 

数字操作:

// 格式化数字,每3位用逗号分割。保留两位小数,需要保留更多小数,可以进行修改
function formatNumber(number) {
	if (isNaN(number)) 
		return "";
	
	number = Math.round(number * 100) / 100;
	
	if (number < 0) // 负数。Math.floor(x):向下取整; Math.abs(x):取绝对值。
		return '-' + formatInt(Math.floor(Math.abs(number))) + formatDecimal(Math.abs(number));
	else // 正数
		return formatInt(Math.floor(Math.abs(number))) + formatDecimal(Math.abs(number));
}

// 格式化整数部分,每3位用逗号分割
function formatInt(x) {
	var num = Number(x);
	if(isNaN(num))
		return;

	var number = num.toString();

	if (number.length <= 3) {
		return number;
	}	else {
		var mod = number.length % 3;
		var rs = (mod == 0 ? '' : number.substring(0, mod));
		for (i = 0; i < Math.floor(number.length / 3); i++) {
			if ((mod == 0) && (i == 0))
				rs += number.substring(mod + 3 * i, mod + 3 * i + 3);
			else
				rs += ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
		}
		return rs;
	}
}

// 格式化小数部分, 保留两位小数
function formatDecimal(x) {
	var num = Number(x);
	if(isNaN(num))
		return;

	var decimal = Math.round((num - Math.floor(num)) * 100);
	return decimal < 10 ? '.0' + decimal : '.' + decimal;
}

 

你可能感兴趣的:(JS操作数字)