一 Math.round(),Math.ceil(),Math.floor()的区别
Math.round():根据“round”的字面意思“附近、周围”,可以猜测该函数是求一个附近的整数
小数点后第一位<5
1 2 |
正数:Math.round(11.46)=11 负数:Math.round(-11.46)=-11 |
小数点后第一位>5
1 2 |
正数:Math.round(11.68)=12 负数:Math.round(-11.68)=-12 |
小数点后第一位=5
1 2 |
正数:Math.round(11.5)=12 负数:Math.round(-11.5)=-11 |
总结:(小数点后第一位)大于五全部加,等于五正数加,小于五全不加
Math.ceil():根据“ceil”的字面意思“天花板”去理解;
1 2 |
Math.ceil(11.46)=Math.ceil(11.68)=Math.ceil(11.5)=12 Math.ceil(-11.46)=Math.ceil(-11.68)=Math.ceil(-11.5)=-11 |
总结:只要后边有小数都是向上取整
Math.floor():根据“floor”的字面意思“地板”去理解;
1 2 |
Math.floor(11.46)=Math.floor(11.68)=Math.floor(11.5)=11 Math.floor(-11.46)=Math.floor(-11.68)=Math.floor(-11.5)=-12 |
总结:只要是有小数,都是向下取证;
二 js保留两位小数总结
1四舍五入型的
1 |
var num =2.446242342; |
//toFixed(要保留的小数点后边的位数)
1 |
num = num.toFixed(2); // 输出结果为 2.45 返回的值是一个字符串类型 |
2 不四舍五入型的
第一种,先把小数变整数:
1 |
Math.floor(15.7784514000 * 100) / 100 // 输出结果为 15.77 |
返回的是一个数字类型
第二种,当作字符串,使用正则匹配:
1 |
Number(15.7784514000.toString().match(/^\d+(?:\.\d{0,2})?/)) |
// 输出结果为 15.77,不能用于整数如 10 必须写为10.0000
返回的是一个数字类型
注意:如果是负数,请先转换为正数再计算,最后转回负数
三 Js取float型小数点后两位数的方法
1 处理会四舍五入
1 2 |
var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45 |
//toFixed(要保留的小数点后边的位数)
此处的toFixed()函数取到的值是一个string类型,而不是一个number类型;
处理不会四舍五入
1 先把小数变整数
1 |
Math.floor(15.7784514000 * 100) / 100 // 输出结果为 15.77 |
此处的取到的值是一个number类型;
2当做字符串,使用正则匹配
1 |
Number(15.7784514000.toString().match(/^\d+(?:\.\d{0,2})?/)) |
// 输出结果为 15.77,不能用于整数如 10 必须写为10.0000
此处取到的值是一个number类型
注意:如果是负数,请先转为整数再计算,最后在转回负数;
<script type="text/javascript">
保留两位小数
1功能:将浮点数四舍五入,取小数点后2位
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var num =2.446242342; function toDecimal(x) { var f = parseFloat(x); if (isNaN(f)) { return; } f = Math.round(x*100)/100; return f; } toDecimal(num)//调用方法 var nums=toDecimal(num) //调用函数方法后,他不会改变原来那个变量所拥有的值,而是从新 替换成一个新值; console.log(typeof(nums)); |
此处获取到的值是一个number类型
2制保留2位小数,如:2,会在2后面补上00.即2.00
//强制保留两位小数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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; } |
此处获取到的是一个string类型的值;
3 可选择要保留几位小数的方法
1 2 3 4 5 6 7 |
var num=2.446242342; function fomatFloat(src,pos){ //src是要保留小数的值,pos是要保留几位小数; return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos); } var nums=fomatFloat(num,3) console.log(nums); console.log(typeof(nums)); |
此处获取到的是一个number类型的值;
4 精确到n位,不含n位
1 2 3 4 |
var num=2.446242342; var nums=num.toPrecision(3); console.log(nums);//2.45 console.log(typeof(nums)); |
此处获取到的是是一个String类型的值
5 只保留整数部分
1 2 3 4 |
var num=2.446242342; var nums=parseInt(num); console.log(nums);//2 console.log(typeof(nums));//number |
6向上取整,有小数就整数部分加1
1 2 3 4 |
var num=2.446242342; var nums=Math.ceil(num); console.log(nums);//3 console.log(typeof(nums));//number |
7四舍五入.
1 2 3 4 5 6 7 8 |
var num=2.446242342; var nums=Math.round(num); console.log(nums);//2 console.log(typeof(nums));//number var num=2.6788667778; var nums=Math.round(num); console.log(nums);//3 console.log(typeof(nums));//number |
8向下取整
1 2 3 4 |
var num=2.6788667778; var nums=Math.floor(num) console.log(nums);//2 console.log(typeof(nums));//number |
9对于小数点位数大于2位的,用上面的函数没问题,但是如果小于2位的,比如:changeTwoDecimal(3.1)
,将返回3.1,如果你一定需要3.10这样的格式,那么需要下面的这个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var num=2.1; 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; } var nums=changeTwoDecimal_f(num); console.log(nums);//2.10 console.log(typeof(nums));//string |
功能:将浮点数四舍五入,取小数点后2位,如果不足2位则补0,
这个函数返回的是字符串的格式用法:
changeTwoDecimal_f(3.1415926)返回3.14
changeTwoDecimal_f(3.1)返回3.10
</script>
from:https://zhuanlan.zhihu.com/p/44171761