取整 运算定要注意数据类型
在学习js的过程中经常遇到需要大量计算的问题,此时就需要用到那些常见的运算符。在写代码进行数学计算的时候输入和输出的数据类型要格外注意。整数和小数,数据类型不同结果也不一样。有时会因为数据类型,导致写出的代码调试的时候出现错误,不能实现要求的功能。
下面就一个题目来说明:
题目:
找出100-999之间的所有“水仙花数”。所谓水仙花数是指一个三位 数,各位数字的立方和等于该数本身。(如153=1的3次方+5的3次方+3的3次方)并输出这些数字。
题目思路很清晰明了,主要用到for循环和if判断语句。
开始我也觉得很简单,但上来写出来的代码却无法得出我想要的结果。
错误代码:
<script>
1 for (var i = 100; i <= 999; i++) {
2 var x = i / 100;
3 //x = Math.floor(x);
4 var y = i % 100;
5 y = y / 10;
6 //y = Math.floor(y);
7 var z = i % 10;
8 if (x * x * x + y * y * y + z * z * z == i) {
9 document.write(i);
10 document.write(" ");
}
}
</script>
注意代码中的两行注释,最初写完的代码中没有那两句,每行代码前面的数字是我故意加上便于分析原因.(原代码中没有前面的数字序号)
这也导致,我调试运行的时候老是不出结果,检查代码也没发现问题.后来我直接给i赋值153(题目中的例子),再通过审查元素我让发现,在代码执行到第2行时,x的值是小数1.53,不是1,后面也出现了这种问题.我才发现原来是输出的数据类型有问题.随后我加了两行取整的代码,再调试就成功了.
注意: 重要!!! 今后遇到各种运算问题时一定要注意!
常用的三种取整
1. Math.Round:四舍六入五取整
2. Math.Ceiling:向上取整,只要有小数都加1
3. Math.Floor:向下取整,总是舍去小数
修改后正确的代码:
<script>
for (var i = 100; i <= 999; i++) {
var x = i / 100;
x = Math.floor(x);
var y = i % 100;
y = y / 10;
y = Math.floor(y);
var z = i % 10;
if (x * x * x + y * y * y + z * z * z == i) {
document.write(i);
document.write(" ");
}
}
</script>