2016-12-30 189 views
2

我想強制Float,在JSON.stringify()之後。不幸的是JSON.stringify()刪除了1 。0當使用JSON.stringify時強制浮點值

例子:

JSON.stringify(1.0) // "1" 

通緝結果:

JSON.stringify(1.0) // "1.0" 

我使用它希望在JSON格式的對象的API,但它只能理解十進制值。所以我想問是否可以透過JSON.stringify生成與十進制值的字符串,而無需使用正則表達式,.replace魔法

+2

我猜你希望它仍然輸出「1」爲'JSON.stringify(1)'雖然? JavaScript中不存在「float」,只有['Number'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)。 ['stringify'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)有一個接受函數的重載。用它來確定輸出內容。 –

+0

@MikeMcCaughan no JSON.stringify(1)也應輸出「1.0」。是的,我見過這個超載功能。問題是;當我使用JSON.stringify({Test:1},函數(key,value){if(key =='Test'){return value.toFixed(1)} return value;}); //「{」Test「:」1.0「}」'。我不想有引號後,「測試」:**「** ** 1.0」 *** –

回答

1

對您的問題的直接和合理的簡短回答是,您無法使用JSON.stringify自定義數值的序列化。見JSON.stringify() on MDN

如果你真的需要爲你的整數,你有,你在你的問題提到使用「正則表達式魔法」或找到一個圖書館,讓您執行這樣的招數小數。如果你不處理過於複雜或許多不同類型的對象,你可能會手動將它們串聯起來。

作爲旁註,聽起來非常,非常可疑與需要使用定製格式化JSON被供給的API。我會試着檢查是否有其他方式使用它。

+0

感謝您的回答。那麼我會找出一些東西。不幸的是,這會影響到我的代碼的清潔度:(嗯,這是真的,我必須使用雙值,我三重檢查它。我不是直接使用API​​,但有一些等價的。我想創建一個庫,生成「Minecraft命令「,這些命令不會被Minecraft解析得很好,如果你想知道更多關於這個問題的信息,下午我,否則,祝你有美好的一天:) –

1

1和1.0是在Javascript相同。如果字符串化是已經不僅僅是一個尾隨零以上的浮動,它將正確保留該值:

JSON.stringify(1.5) // "1.5" 
+0

我知道,但我也想強迫使用時,「1.0」 –

3

使用toFixed,而不是字符串化。例如:

var num = 1; 
var numStr = num.toFixed(1); //result is "1.0" 

進一步瞭解toFixed - http://www.w3schools.com/jsref/jsref_tofixed.asp

要清楚我們正在談論轉換數字字符串不是數字浮動(這種類型不存在於JavaScript中)就像從問題描述中可以理解。 toFixed將始終以指定的小數位數返回字符串。

+0

我會建議使用MDN的引用( ['.toFixed()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed))。 –

+1

會導致爲'JSON.stringify(1.toFixed(1))//'「1.0」''。不是我正在尋找的東西。它必須有引號 –

+0

@LivioBrunner的方式你是stringify字符串?toFixed給出了字符串,所以不需要再次使用它在stringify中。 –