由一篇博文做出的程式碼,不用Math.round()如何實現其功能

GabrielChenCN發表於2015-12-17
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name = "author" content="chen siming ,Gabrielchen,chengdu ">
    <title>bitOperation</title>
    <script>
        //hey,if we don't have the function of round() in javascript,what should we do ?
        function myRound1(x){
            //why not use toString()? what are their difference?
            //about "null" and "undefined"

            var xStr = String(x).split(".");
            xStr0=xStr[0];
            xStr1=xStr[1];
            if(xStr1==null){
                return x;
            }
            else {
                if (parseInt(xStr1.slice(0, 1)) > 5) {
                    if (parseInt(xStr0 > 0)) {
                        return parseInt(xStr0) + 1;
                    }
                    else return parseInt(xStr0) - 1;
                }
                else return parseInt(xStr0);
            }

            //for me is difficult to distinguish split()分離 and slice()切下
            //split() 法用於把一個字串分割成字串陣列,return:array[]  parameter: split(separator,howmany)
            //separator    必需。字串或正規表示式,從該引數指定的地方分割 stringObject。
            //howmany  可選。該引數可指定返回的陣列的最大長度。如果設定了該引數,返回的子串不會多於這個引數指定的陣列。
            // 如果沒有設定該引數,整個字串都會被分割,不考慮它的長度。

            //slice()方法可從已有的陣列中返回選定的元素 return :返回一個新的陣列,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。  parameter :slice(start,end)
            //start    必需。規定從何處開始選取。如果是負數,那麼它規定從陣列尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。
            //end  可選。規定從何處結束選取。該引數是陣列片斷結束處的陣列下標。如果沒有指定該引數,那麼切分的陣列包含從 start 到陣列結束的所有元素。如果這個引數是負數,那麼它規定的是從陣列尾部開始算起的元素。
        }

        //what if we can not use the all javascript function ,how can we do that ?
        function myRound2(x){

            //| 二進位制或運算
            return ~~(x > 0 ? (x + 0.5) : (x - 0.5));

        }

        function myRoundBit(x){
            //bit - operation
            //~就是按位取反,類似:00111,取反則為11000。取反會幹掉小數
            //   if x =12.5 then  ~x =12
            //>>是有符號右移運算子
             return ~~(x + 0.5 + (x >> 30));
        }
        //it's very sorry to tell you ,the functions of "myRound2()" and "myRoudBit()" are not to work correctly
        function main(){
            var x= document.getElementById("bitOpera").value;
            document.write("myRound1:"+myRound1(x)+"<br/>"+"myRound2(error):"+myRound2(x)+"<br/>"+"myRoundBit(error):"+myRoundBit(x)+"<br/>"+"Math.round():"+Math.round(x)+"<br/>");
            document.write("it's very sorry to tell you ,the functions of 'myRound2()' and 'myRoudBit()' are not to work correctly,can you fix it ?");
        }

    </script>
</head>
<body>
    <h1>please enter the DECIMAL</h1>
    <input type="text" id="bitOpera">
    <input type="button" id="btn" value="click" onclick="main()">

</body>
</html>

  其中myRound1()和myRoundbit()方法有問題

 

 

   -原部落格地址發表於 2015 年 3 月 26 日 由 Gabriel 

相關文章