教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Web前端開發(fā)培訓之JS中toFixed四舍五入的坑

更新時間:2016年11月23日14時49分 來源:傳智播客web前端開發(fā)培訓學院 瀏覽次數:

最近發(fā)現(xiàn)JS當中toFixed方法存在一些問題。toFixed這個函數一直在用,以前都是把 Number 四舍五入為指定小數位數的數字,沒有考慮其他。今天需要考慮擴展一下功能,于是搜索了一下,竟然發(fā)現(xiàn)了一個大坑。
請看下面的例子:
  1. var num = 3.15;
  2. var n = num.toFixed(1);
  3. console.log(n);
復制代碼
打印結果是3.1!
說好的四舍五入呢?不急,再看下面的例子:
  1. var num = 3.25;
  2. var n = num.toFixed(1);
  3. console.log(n);
復制代碼
納尼?3.3!這下又四舍五入了。why?網上有人據此整理出“四舍六入,五看奇偶”的原則,就是說大于五的就進一位,五呢偶進奇不進。那么是不是這樣呢?請看下面的例子:
  1. var num1 = 3.55;
  2. var num2 = 3.65;
  3. var num3 = 3.05;
  4. var n1 = num1.toFixed(1);
  5. var n2 = num2.toFixed(1);
  6. var n3 = num3.toFixed(1);
  7. console.log(n1,n2,n3);
復制代碼
效果預覽:



file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wps50B3.tmp.jpg
按照“四舍六入,五看奇偶”的原則,n1==3.5是對的,n2==3.7才是, n3==3.1(這里不討論0算不算偶數,根據我小學知識算它偶數)才對嘛。然并卵,機器是不會騙人的。

根據測試,2、3、4、7、8、9這幾個都會四舍五入。
還有誰不懵逼的???
根據多方查證,完美的處理方式是自己改寫這個函數

至于JavaScript內部是為什么,沒去摳。有興趣的同學可以去研究下,希望不吝賜教。

當然,對于大多數情況,這個問題也不是什么問題。

另外,附帶提一下push()。
網上有的同學把join錯寫成push時出了問題,形如下面:
  1. //目標,希望得到1
  2. var arr = ["1"];
  3. console.log(arr.join(","));
  4. //錯寫,結果得到2
  5. var arr = ["1"];
  6. console.log(arr.push(","));
復制代碼
效果預覽:

file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wps50C4.tmp.jpg
why?其實我們仔細點就可以發(fā)現(xiàn),join那里打印出來的是字符串"1",push那里打印出來的是數字2。

    join()把數組中的所有元素轉換為一個字符串,返回結果---轉換后的字符串
    push()是往數組中添加新元素,返回結果---新數組的長度。

綜上所述,結果并沒有問題,只是這位同學不清楚兩個函數的返回結果。
web前端開發(fā)培訓

本文版權歸傳智播客web前端開發(fā)學院所有,歡迎轉載,轉載請注明作者出處,謝謝!
作者:傳智播客web前端培訓學院;
首發(fā):http://xamj520.com/web/ 
0 分享到:
和我們在線交談!