2013-05-21 192 views
5

我正在使用Node.js和內置的JSON對象來對JSON對象進行字符串化。在對象是JSON將float轉換爲int

{ 
    weight : 1.0 
} 

然而,當我和字符串化寫入文件輸出爲重:1.

+2

不知道是什麼問題。 JavaScript中的'1'和'1.0'是相同的東西。 – phenomnomnominal

+0

使用'parseInt(obj.weight)' – Heavy

+0

用1.5試試看,你會發現它實際上保留小數。 – techfoobar

回答

1

其實你是不是在Javascript的問題,1 == 1.0 == 1.00如果你有一個像1.55浮點值那麼字符串化給你同樣的1.55 not 1 ..即使這樣,如果你想1.0寫入,將值更改爲字符串

我的意思是用雙引號值

{ 
    weight : "1.0" 
} 
+0

如果JSON文件是用於使用區分「1.0」和「1」的不同語言編寫的代碼,那麼這仍然是一個問題。 –

+0

其實這可能是一個問題。例如。我們有一個json模式生成器,它使用來自javascript客戶端的數據。問題是,1.0生成器創建類型「數字」,但1創建「整數」。然後當數據改變時到1.2你驗證1.2對整數...失敗。 –

4

正如this answer注意到了類似的問題,並在this MSDN page

有沒有這樣的事情在JavaScript整數。 JavaScript中的數字是「雙精度64位格式IEEE 754值」。

打開您的網絡瀏覽器的控制檯並鍵入1.0。你會看到打印出1。 JavaScript中的所有數字都是浮點數,所以您的序列化程序只是選擇了不必要的精度。

+3

但是當我寫'JSON.stringify(0.1)',爲什麼它打印'0.1'而不是'0.1000000000000000055511151231257827021181583404541015625'?它遺漏了必要的精度 –

+0

該數字不能表示爲64位浮點數。通常,浮點數不好表示不能用3.14159 ... * 2^n格式表示的數字,其中「...」代表少數數字,n不是很大。 –