本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容:
一、我们首先从经典的“四舍五入”算法讲起
1、四舍五入的情况
var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45
2、不四舍五入
第一种,先把小数边整数:
Math.floor(15.7784514000 * 100) / 100 // 输出结果为 15.77
第二种,当作字符串,使用正则匹配:
Number(15.7784514000.toString().match(/^\d+("htmlcode">//四舍五入保留2位小数(若第二位小数为0,则保留一位小数) function keepTwoDecimal(num) { var result = parseFloat(num); if (isNaN(result)) { alert('传递参数错误,请检查!'); return false; } result = Math.round(num * 100) / 100; return result; } //四舍五入保留2位小数(不够位数,则用0替补) function keepTwoDecimalFull(num) { var result = parseFloat(num); if (isNaN(result)) { alert('传递参数错误,请检查!'); return false; } result = Math.round(num * 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; }如果大家想对javascript有系统深入的学习,可以参阅 JavaScript启示录 PDF原书完整版 这本经典书籍
二、Js取float型小数点后两位数的方法
<script type="text/javascript"> //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x); if (isNaN(f)) { return; } f = Math.round(x*100)/100; return f; } //制保留2位小数,如:2,会在2后面补上00.即2.00 function toDecimal2(x) { var f = parseFloat(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; } function fomatFloat(src,pos){ return Math.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)); </script>用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. 最笨的办法
function get() { var s = 22.127456 + ""; var str = s.substring(0,s.indexOf(".") + 3); alert(str); }2. 正则表达式效果不错
<script type="text/javascript"> onload = function(){ var a = "23.456322"; var aNew; var re = /([0-9]+.[0-9]{2})[0-9]*/; aNew = a.replace(re,"$1"); alert(aNew); } </script>3. 他就比较聪明了
<script> var num=22.127456; alert( Math.round(num*100)/100); </script>4.会用新鲜东西的朋友....... 但是需要 IE5.5+才支持。
5.js保留2位小数(强制)
对于小数点位数大于2位的,用上面的函数没问题,但是如果小于2位的,比如:changeTwoDecimal(3.1),将返回3.1,如果你一定需要3.10这样的格式,那么需要下面的这个函数:
function changeTwoDecimal_f(x) { var f_x = parseFloat(x); if (isNaN(f_x)) { alert('function:changeTwoDecimal->parameter error'); return false; } var f_x = Math.round(x * 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保留两位小数,自动补充零
function returnFloat(value){ var value=Math.round(parseFloat(value)*100)/100; var xsd=value.toString().split("."); if(xsd.length==1){ value=value.toString()+".00"; return value; } if(xsd.length>1){ if(xsd[1].length<2){ value=value.toString()+"0"; } return value; } }四、JS取整数,js取绝对值,js四舍五入(可保留两位小数)
JS取整数,js取绝对值,js四舍五入(可保留两位小数)函数如下:
<SCRIPT language=javascript> <!-- function jsMath() { document.write(Math.floor(5.80) + "<br>");//取整或下舍入 document.write(Math.round(5.80) + "<br>");//四舍五入,取整数 document.write(Math.round((5.80*100)/100) + "<br>");//四舍五入,保留两位小数 document.write(Math.ceil(5.10) + "<br>");//上舍入 document.write(Math.abs(-5.80) + "<br>");//取绝对值 document.write(Math.max(55,58) + "<br>");//返回两个值中最大数 document.write(Math.min(55,58) + "<br>");//返回两个值中最小数 } --> </SCRIPT> <div> <script>jsMath();</script> </div>总结
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 异常。
<script type=”text/javascript”> var num = new Number(13.376954); document.write (num.toFixed(2)) </script> 输出:13.382、自定义函数实现小数保留并四舍五入。
function roundFun(numberRound,roundDigit) { //四舍五入,保留位数为roundDigit if (numberRound>=0){ var tempNumber = parseInt((numberRound * Math.pow(10,roundDigit)+0.5))/Math.pow(10,roundDigit); return tempNumber; } else{ numberRound1=-numberRound; var tempNumber = parseInt((numberRound1 * Math.pow(10,roundDigit)+0.5))/Math.pow(10,roundDigit); return -tempNumber; } }然后调用roundFun()这个函数就可以了。如roundFun('13.376954′,2);当然返回的结果跟第一种方法是一样的。
3、通过函数截取,截取到小数点后面第几位,当然这种方法就没有四舍五入了。
<script type=”text/javascript”> tmp = 13.376954″ result = tmp.substr(0,tmp.indexOf(“.”)+2); alert(result); </script>以上就是小编为大家整理的关于js保留两位小数方法的总结内容,感谢你的支持,如果你对js保留两位小数方法还有任何不明白的地方,可以在下方的留言区讨论。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 好薇2024《兵哥哥》1:124K黄金母盘[WAV+CUE]
- 胡歌.2006-珍惜(EP)【步升大风】【FLAC分轨】
- 洪荣宏.2014-拼乎自己看【华特】【WAV+CUE】
- 伊能静.1999-从脆弱到勇敢1987-1996精选2CD【华纳】【WAV+CUE】
- 刘亮鹭《汽车DJ玩主》[WAV+CUE][1.1G]
- 张杰《最接近天堂的地方》天娱传媒[WAV+CUE][1.1G]
- 群星《2022年度发烧天碟》无损黑胶碟 2CD[WAV+CUE][1.4G]
- 罗文1983-罗文甄妮-射雕英雄传(纯银AMCD)[WAV+CUE]
- 群星《亚洲故事香港纯弦》雨果UPMAGCD2024[低速原抓WAV+CUE]
- 群星《经典咏流传》限量1:1母盘直刻[低速原抓WAV+CUE]
- 庾澄庆1993《老实情歌》福茂唱片[WAV+CUE][1G]
- 许巍《在别处》美卡首版[WAV+CUE][1G]
- 林子祥《单手拍掌》华纳香港版[WAV+CUE][1G]
- 郑秀文.1997-我们的主题曲【华纳】【WAV+CUE】
- 群星.2001-生命因爱动听电影原创音乐AVCD【MEDIA】【WAV+CUE】