一、我们首先从经典的“四舍五入”算法讲起
1、四舍五入的情况
?12 var num =2.446242342; num = num.toFixed2); // 输出结果为 2.45
2、不四舍五入
第一种,先把小数边整数:
?1 Math.floor15.7784514000 * 100) / 100 // 输出结果为 15.77
第二种,当作字符串,使用正则匹配:
?1 Number15.7784514000.toString).match/^\d+?:.\d{0,2})?/)) // 输出结果为 15.77,不能用于整数如 10 必须写为10.0000
注意:如果是负数,请先转换为正数再计算,最后转回负数
再分享一个经典的解决四舍五入问题后js保留两位小数的方法:
?1234567891011121314151617181920212223242526272829 //四舍五入保留2位小数(若第二位小数为0,则保留一位小数) function keepTwoDecimalnum) { var result = parseFloatnum); if isNaNresult)) { alert‘传递参数错误,请检查!’); return false; } result = Math.roundnum * 100) / 100; return result; } //四舍五入保留2位小数(不够位数,则用0替补) function keepTwoDecimalFullnum) { var result = parseFloatnum); if isNaNresult)) { alert‘传递参数错误,请检查!’); return false; } result = Math.roundnum * 100) / 100; var s_x = result.toString); var pos_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’; } return s_x; }
二、Js取float型小数点后两位数的方法
?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
用Javascript取float型小数点后两位,例22.127456取成22.13,如何做?
1.丢弃小数部分,保留整数部分
?1 parseInt5/2)
2.向上取整,有小数就整数部分加1
?1 Math.ceil5/2)
3,四舍五入.
?1 Math.round5/2)
4,向下取整
?1 Math.floor5/2)
另类的方法
- 最笨的办法
?123456 function get) { var s = 22.127456 + “”; var str = s.substring0,s.indexOf“.”) + 3); alertstr); }
2. 正则表达式效果不错
?123456789
3. 他就比较聪明了
?1234
4.会用新鲜东西的朋友… 但是需要 IE5.5+才支持。
5.js保留2位小数(强制)
对于小数点位数大于2位的,用上面的函数没问题,但是如果小于2位的,比如:changeTwoDecimal3.1),将返回3.1,如果你一定需要3.10这样的格式,那么需要下面的这个函数:
?123456789101112131415161718 function changeTwoDecimal_fx) { var f_x = parseFloatx); if isNaNf_x)) { alert‘function:changeTwoDecimal->parameter error’); return false; } var f_x = Math.roundx * 100) / 100; var s_x = f_x.toString); var pos_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’; } return s_x; }
三、js保留两位小数,自动补充零
?1234567891011121314 function returnFloatvalue){ var value=Math.roundparseFloatvalue)*100)/100; var xsd=value.toString).split“.”); ifxsd.length==1){ value=value.toString)+”.00″; return value; } ifxsd.length>1){ ifxsd[1].length<2){ value=value.toString)+“0”; } return value; } }
四、JS取整数,js取绝对值,js四舍五入可保留两位小数)
JS取整数,js取绝对值,js四舍五入可保留两位小数)函数如下:
?1234567891011121314151617
总结
JS数据格式化是在进行web前端开发时常碰到的事情,特别是在数据类型为Float的数据就需要特殊处理,如保留两位小数、小数点后的数据是否需要四舍五入等等。下面就来介绍实现数据格式化保留两位小数的多种方法。
1、JS自带的方法toFixed),toFixed) 方法可把 Number 四舍五入为指定小数位数的数字。
语法:NumberObject.toFixednum),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 异常。
?12345 输出:13.38
2、自定义函数实现小数保留并四舍五入。
?12345678910 function roundFunnumberRound,roundDigit) { //四舍五入,保留位数为roundDigit if numberRound>=0){ var tempNumber = parseIntnumberRound * Math.pow10,roundDigit)+0.5))/Math.pow10,roundDigit); return tempNumber; } else{ numberRound1=-numberRound; var tempNumber = parseIntnumberRound1 * Math.pow10,roundDigit)+0.5))/Math.pow10,roundDigit); return -tempNumber; } }
然后调用roundFun)这个函数就可以了。如roundFun‘13.376954′,2);当然返回的结果跟第一种方法是一样的。
3、通过函数截取,截取到小数点后面第几位,当然这种方法就没有四舍五入了。
?12345