取整 运算定要注意数据类型

 

       在学习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("&nbsp");
            }
        }
</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("&nbsp");
            }
        }
</script>

posted @ 2017-05-19 13:08  御风飞舞  阅读(443)  评论(0编辑  收藏  举报