2010-05-20 49 views
4

在JavaScript中,我注意到toString和valueOf在小數點後截尾0。例如:toString和valueOf截斷小數點後的0 0

var num = 0.00 
var num2 = 0.0100 

num.valueOf() or num.toString() // outputs 0 
num2.valueOf() or num2.toString() // outputs 0.01 

這是正常的行爲,並有一些保留尾部0?

編輯:我改變了我原來的問題,因爲我經過一些測試後意識到上述是問題的根源。謝謝。

+0

當你說它「不能正常工作」,出了什麼問題?你有沒有嘗試以某種方式調試它? – Pointy 2010-05-20 15:47:34

+0

format函數應該使用'style'變量來決定它應該輸出多少個小數。當我使用第一種方法時,會切斷小數點,但使用第二種方法正確輸出。格式函數本身工作得很好,只有當我以上述方式傳遞樣式時,我只是想知道在格式()(方法1)的部分或外部(方法2)中是否存在.toString )。 – Choy 2010-05-20 15:55:07

+0

那麼你有沒有插入一些「console.log」調用(對於Firebug)或一些警報或任何看到「typeof」事件返回的是什麼,以及在if語句中調用該「toString」的結果是什麼? – Pointy 2010-05-20 15:59:45

回答

4

這不是toString也不是valueOf,它會在小數點後截尾0!
當你寫一個小數這樣:

var num2 = 0.0100 

你告訴你的解釋變量NUM2應包含自上次兩個零的十進制數0.0100,即0.01不顯著。
的十進制數是表示爲一個十進制數存儲器:

0.0100 
0.010 
0.01 
0.01000 

都是非常相同的編號,因此它們都表示在存儲器中的相同的方式。無法區分它們。
因此不可能知道num2值0.01已被分配寫入具有零,一個,兩個或更多個尾隨零的數字。

如果您想要按寫入方式存儲十進制數,則必須將其存儲爲字符串。

+0

感謝您的解釋。 – Choy 2010-05-20 21:53:42

+0

不客氣:-) – 2010-05-21 06:34:20

2

A number in javascript does not have trailing zero- if if it can,you will stop? 這是正常的行爲。 如果你返回一個字符串,你可以強制它們出現 -

var n= '0.0' 
alert(n)>> 0 
alert(n.toFixed(5))>> '0.00000' 
alert(n.toPrecision(5))>>'0.0000' 
+1

如果你想把一個數字完全轉換成寫入一個字符串並且這個數字可以有1個零,2個零,5個零等等......在這之後呢?使用toFixed或toPrecision需要事先知道有多少尾隨零。 – Choy 2010-05-20 19:27:31

相關問題