JavaScript中Number没有直接截取小区位的方法?

1:假设:有一个小数11.4449,若要求保留小数点后3位,得到11.444这样的结果。
  1.1:Number中常用的方法为toFixed():

toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。

1.2:Math中常用的舍入方法:
ceil(x) 对数进行上舍入。
floor(x) 对数进行下舍入。
1.3:运行结果
<script>
	var i = 11.4449;
	console.log(i.toFixed(3));//11.445
	console.log(Math.floor(i));//11
	console.log(Math.ceil(i));//12
</script>

 
 
由此可见,上述方法均无效。
1.4:采用字符串来操作

先检索"."出现的位置:

indexOf() 检索字符串。
var index = i.toString().indexOf(".");
console.log(index);//2
之后使用下面的方法进行拼接:
substr() 从起始索引号提取字符串中指定数目的字符。
substring() 提取字符串中两个指定的索引号之间的字符。
var part1 = i.toString().substr(0,index);
console.log(part1);//11
var part2 = i.toString().substring(index,3+(1+index));
console.log(part2);//.444
之后将part1和part2合并即得到11.444!
//封装的方法
function trunc(i,index){
		var result = i.toString().substr(0,index)
		+i.toString().substring(index,index+(1+index));
		return result;
	}
console.log(trunc(11.4444,2));

1.5:采用Math的方法(优先选择)
回顾一下,Math向下取整的 floor。若保留小数点后3位,可以先将数乘以10^3,之后调用floor,再除以1000
var j = 11.4449;
var j1 = j*1000;//11444.9
var j2 = Math.floor(j1);//11444
var j3 = j2/1000;//11.444
//同样封装到方法内
function trunc2(i,index){
		var p = Math.pow(10,index);
		var result = Math.floor(i*p)/p;
		return result;
}
console.log(trunc2(11.4444,2));



发布了15 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/z_programmer/article/details/53493813