2017-03-16 48 views
4

toPrecision的返回值是「一個字符串...以固定點或指數表示法四捨五入爲爲精度有效數字」。toPrecision的行爲如何,然後toString?

8.235 =>「8.23」不是四捨五入。爲什麼不同?

var toP = function (n) { 
 
    console.log(n, n.toPrecision(3)); 
 
} 
 
    
 
toP(1.235); // 1.235 "1.24" 
 
toP(2.235); 
 
toP(3.235); 
 
toP(4.235); 
 
toP(5.235); 
 
toP(6.235); 
 
toP(7.235); 
 
toP(8.235); // 8.235 "8.23" why?
.as-console-wrapper{min-height:100%}

+1

我不得不檢查ES標準; ['Number.prototype.toPrecision'](http://www.ecma-international.org/ecma-262/6.0/#sec-number.prototype.toprecision)它從來不打算舍入。 MDN文檔稍微不正確。 – KarelG

回答

3

與往常一樣,它的浮點(中),精確度是難辭其咎。

二進制1.235是1.0011110000101000111101011100001010001111010111000011 ...
截斷並重新轉換爲十進制,你會得到1.235000000000000098這的確不全面上漲。

但8.235是1000.0011110000101000111101011100001010001111010111 ...
截斷並重新轉換爲十進制,你8.234999999999999432,這輪下跌。

+0

應該一直這樣做呢? 'Math.round(n * 1000)/ 1000' –

+1

這可能只是改變你的浮點錯誤。 –

+0

@KaFaiLo把它當作字符串... – deviantfan

相關問題