在Web开发中,处理数值时经常需要将数字格式化为特定的小数位数,尤其是在金融、科学计算等领域。JavaScript提供了多种方法来实现这一需求,包括内置的toFixed()方法、自定义函数以及字符串操作等。本文将详细介绍这些方法,并通过具体的代码示例帮助读者在实际开发中灵活应用。
一、我们首先从经典的“四舍五入”算法讲起
1、四舍五入的情况
varnum=2.446242342;num=num.toFixed(2);//输出结果为2.45
2、不四舍五入
第一种,先把小数边整数:
Math.floor(15.7784514000*100)/100//输出结果为15.77
第二种,当作字符串,使用正则匹配:
Number(15.7784514000.toString().match(/^\\d+(?:\\.\\d{0,2})?/))//输出结果为15.77,不能用于整数如10必须写为10.0000
注意:如果是负数,请先转换为正数再计算,最后转回负数
再分享一个经典的解决四舍五入问题后js保留两位小数的方法:
//四舍五入保留2位小数(若第二位小数为0,则保留一位小数)functionkeepTwoDecimal(num){varresult=parseFloat(num);if(isNaN(result)){alert(\'传递参数错误,请检查!\');returnfalse;}result=Math.round(num*100)/100;returnresult;}//四舍五入保留2位小数(不够位数,则用0替补)functionkeepTwoDecimalFull(num){varresult=parseFloat(num);if(isNaN(result)){alert(\'传递参数错误,请检查!\');returnfalse;}result=Math.round(num*100)/100;vars_x=result.toString();varpos_decimal=s_x.indexOf(\'.\');if(pos_decimal<0){pos_decimal=s_x.length;s_x+=\'.\';}while(s_x.length<=pos_decimal+2){s_x+=\'0\';}returns_x;}
如果大家想对javascript有系统深入的学习,可以参阅 JavaScript启示录 PDF原书完整版 这本经典书籍
二、Js取float型小数点后两位数的方法
//保留两位小数//功能:将浮点数四舍五入,取小数点后2位functiontoDecimal(x){varf=parseFloat(x);if(isNaN(f)){return;}f=Math.round(x*100)/100;returnf;}//制保留2位小数,如:2,会在2后面补上00.即2.00functiontoDecimal2(x){varf=parseFloat(x);if(isNaN(f)){returnfalse;}varf=Math.round(x*100)/100;vars=f.toString();varrs=s.indexOf(\'.\');if(rs<0){rs=s.length;s+=\'.\';}while(s.length<=rs+2){s+=\'0\';}returns;}functionfomatFloat(src,pos){returnMath.round(src*Math.pow(10,pos))/Math.pow(10,pos);}//四舍五入alert(\"保留2位小数:\"+toDecimal(3.14159267));alert(\"强制保留2位小数:\"+toDecimal2(3.14159267));alert(\"保留2位小数:\"+toDecimal(3.14559267));alert(\"强制保留2位小数:\"+toDecimal2(3.15159267));alert(\"保留2位小数:\"+fomatFloat(3.14559267,2));alert(\"保留1位小数:\"+fomatFloat(3.15159267,1));//五舍六入alert(\"保留2位小数:\"+1000.003.toFixed(2));alert(\"保留1位小数:\"+1000.08.toFixed(1));alert(\"保留1位小数:\"+1000.04.toFixed(1));alert(\"保留1位小数:\"+1000.05.toFixed(1));//科学计数alert(3.1415.toExponential(2));alert(3.1455.toExponential(2));alert(3.1445.toExponential(2));alert(3.1465.toExponential(2));alert(3.1665.toExponential(1));//精确到n位,不含n位alert(\"精确到小数点第2位\"+3.1415.toPrecision(2));alert(\"精确到小数点第3位\"+3.1465.toPrecision(3));alert(\"精确到小数点第2位\"+3.1415.toPrecision(2));alert(\"精确到小数点第2位\"+3.1455.toPrecision(2));alert(\"精确到小数点第5位\"+3.141592679287.toPrecision(5));
用Javascript取float型小数点后两位,例22.127456取成22.13,如何做?
1.丢弃小数部分,保留整数部分
parseInt(5/2)
2.向上取整,有小数就整数部分加1
Math.ceil(5/2)
3,四舍五入.
Math.round(5/2)
4,向下取整
Math.floor(5/2)
另类的方法
1. 最笨的办法
functionget(){vars=22.127456+\"\";varstr=s.substring(0,s.indexOf(\".\")+3);alert(str);}
2. 正则表达式效果不错
onload=function(){vara=\"23.456322\";varaNew;varre=/([0-9]+.[0-9]{2})[0-9]*/;aNew=a.replace(re,\"$1\");alert(aNew);}
3. 他就比较聪明了
varnum=22.127456;alert(Math.round(num*100)/100);
4.会用新鲜东西的朋友....... 但是需要 IE5.5+才支持。
5.js保留2位小数(强制)
对于小数点位数大于2位的,用上面的函数没问题,但是如果小于2位的,比如:changeTwoDecimal(3.1),将返回3.1,如果你一定需要3.10这样的格式,那么需要下面的这个函数:
functionchangeTwoDecimal_f(x){varf_x=parseFloat(x);if(isNaN(f_x)){alert(\'function:changeTwoDecimal->parametererror\');returnfalse;}varf_x=Math.round(x*100)/100;vars_x=f_x.toString();varpos_decimal=s_x.indexOf(\'.\');if(pos_decimal<0){pos_decimal=s_x.length;s_x+=\'.\';}while(s_x.length<=pos_decimal+2){s_x+=\'0\';}returns_x;}
三、js保留两位小数,自动补充零
functionreturnFloat(value){varvalue=Math.round(parseFloat(value)*100)/100;varxsd=value.toString().split(\".\");if(xsd.length==1){value=value.toString()+\".00\";returnvalue;}if(xsd.length>1){if(xsd[1].length<2){value=value.toString()+\"0\";}returnvalue;}}
四、JS取整数,js取绝对值,js四舍五入(可保留两位小数)
JS取整数,js取绝对值,js四舍五入(可保留两位小数)函数如下:
<!--functionjsMath(){document.write(Math.floor(5.80)+\"
\");//取整或下舍入document.write(Math.round(5.80)+\"
\");//四舍五入,取整数document.write(Math.round((5.80*100)/100)+\"
\");//四舍五入,保留两位小数document.write(Math.ceil(5.10)+\"
\");//上舍入document.write(Math.abs(-5.80)+\"
\");//取绝对值document.write(Math.max(55,58)+\"
\");//返回两个值中最大数document.write(Math.min(55,58)+\"
\");//返回两个值中最小数}-->jsMath();
总结
JS数据格式化是在进行web前端开发时常碰到的事情,特别是在数据类型为Float的数据就需要特殊处理,如保留两位小数、小数点后的数据是否需要四舍五入等等。下面就来介绍实现数据格式化保留两位小数的多种方法。
1、JS自带的方法toFixed(),toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
语法:NumberObject.toFixed(num),mun是必需的参数,即规定小数的位数,是 0 ~ 20 之间的值,包括 0 和 20,有些实现可以支持更大的数值范围。如果省略了该参数,将用 0 代替,所以toFixed() 方法可以实现保留2位、3位、4位等等,取决于num的数值。
返回值:返回 NumberObject 的字符串表示,不采用指数计数法,小数点后有固定的 num 位数字。如果必要,该数字会被舍入,也可以用 0 补足,以便它达到指定的长度。如果 num 大于 le+21,则该方法只调用 NumberObject.toString(),返回采用指数计数法表示的字符串。
当 num 太小或太大时抛出异常 RangeError。0 ~ 20 之间的值不会引发该异常。有些实现支持更大范围或更小范围内的值。
当调用该方法的对象不是 Number 时抛出 TypeError 异常。
varnum=newNumber(13.376954);document.write(num.toFixed(2))输出:13.38
2、自定义函数实现小数保留并四舍五入。
functionroundFun(numberRound,roundDigit){//四舍五入,保留位数为roundDigitif(numberRound>=0){vartempNumber=parseInt((numberRound*Math.pow(10,roundDigit)+0.5))/Math.pow(10,roundDigit);returntempNumber;}else{numberRound1=-numberRound;vartempNumber=parseInt((numberRound1*Math.pow(10,roundDigit)+0.5))/Math.pow(10,roundDigit);return-tempNumber;}}
然后调用roundFun()这个函数就可以了。如roundFun(\'13.376954′,2);当然返回的结果跟第一种方法是一样的。
3、通过函数截取,截取到小数点后面第几位,当然这种方法就没有四舍五入了。
tmp=13.376954″result=tmp.substr(0,tmp.indexOf(“.”)+2);alert(result);
总结
本文详细探讨了在JavaScript中保留两位小数的多种实现方法。首先介绍了toFixed()方法,这是一种简单且常用的解决方案。接着,我们提供了一个自定义函数roundFun,用于实现更复杂的四舍五入逻辑,适用于正数和负数。此外,还介绍了通过字符串操作截取小数的方法,以及使用Math.floor和Math.ceil方法处理特殊情况。最后,我们提供了一些额外的技巧,如使用正则表达式匹配小数部分,确保在各种情况下都能得到满意的结果。通过本文的介绍,开发者可以更好地理解和选择适合自己的方法,提高代码的可读性和健壮性。