JS,如果沒有方法。。。(不借助任何JS方法實現round方法)


昨天在單位做一個效果,是圖層向四周擴散的,需要用到Math.round。做完以后,突然產生了一個小念頭:這個方法在JS中是如何寫出來的?

有了想法之后就開始動手了,首先是將數字轉換成字符串:

String(11.2);// return "11.2"

然后就是用split去獲取小數點的位置並且將字符串變為整數和小數:

String(11.2).split(".")//return ["11", "2"];

然后就是對小數部分的判斷了,通過substring方法獲取字符串第一個字符,來看看是進位還是退位:

String(11.234).split(".")[1].substring(0,1);//return "2";

然后通過parseInt來轉換並判斷:

parseInt(String(11.234).split(".")[1].substring(0,1)) < 5;//return true;

最后是通過判斷正負來做最后的處理:

parseInt(String(11.234).split(".")[0].substring(0,1))>0;//return false;

下面是全代碼:

//代碼及思路源自另一個朋友~

function
round (arg) { if(parseInt(String(arg).split(".")[1].substring(0,1)) < 5){ return parseInt(String(arg).split(".")[0]); } else{ if (parseInt(String(arg).split(".")[0]) > 0) { return parseInt(String(arg).split(".")[0]) + 1; } else{ return parseInt(String(arg).split(".")[0]) - 1; } } }

寫到這里貌似是完了,但是突然想了想,如果不使用JS的方法,能否做到這一點呢?

於是進行了簡單的嘗試,首先是如何不使用方法來獲取小數點后的內容?如果不能使用類型轉換而只能使用基本運算,那很難獲取。其實,我要的不是獲取這個數字,而是判定這個數字是否大於0.5。那么,這就方便多了:

var round_x = (((10 * arg) % 10) > 0) ? ((10 * arg) % 10) : -((10 * arg) % 10);// 獲得小數點后的數字*10

當獲取到這個數字后,我們便可以進行最基本的判定來獲取結果了。代碼如下:

function round (arg) {
    
    var round_x = (((10 * arg) % 10) > 0) ? ((10 * arg) % 10) : -((10 * arg) % 10);
    if (round_x < 5) {
        return arg - (arg % 1);
    }else{
        return (arg > 0 ? (arg - (arg % 1) +1) : arg - (arg % 1) - 1);
    }

}

通過簡單的四則運算,我們便獲取到了round的結果。

 

代碼比較簡單,希望有更優秀的代碼,可以相互交流,謝謝~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM