Принудительное значение с плавающей запятой при использовании JSON.stringify
Я хочу, чтобы Number был Float, после JSON.stringify(). К сожалению, JSON.stringify () удаляет 1 .0.
Пример:
JSON.stringify(1.0) // "1"
Требуемый результат:
JSON.stringify(1.0) // "1.0"
Я использую API, который хочет объект в формате JSON, но он понимает только десятичные значения. Поэтому я хотел спросить, возможно ли использовать JSON.stringify для генерации строки с десятичными значениями без использования Regex-.replace-magic
4 ответа
Прямой и достаточно короткий ответ на ваш вопрос - нет, вы не можете настроить сериализацию числовых значений с помощью JSON.stringify. Смотрите JSON.stringify() для MDN.
Если вам действительно нужны десятичные дроби для целых чисел, вы должны использовать "магию регулярных выражений", как вы упомянули в своем вопросе, или найти библиотеку, позволяющую вам выполнять такие трюки. Если вы не имеете дело с чрезмерно сложными объектами или множеством различных типов объектов, вы, вероятно, могли бы привести их в порядок.
Как примечание, это звучит очень, очень подозрительно с API, который должен быть снабжен специально отформатированным JSON. Я бы трижды проверил, есть ли другой способ его использования.
Используйте toFixed вместо stringify. Пример:
var num = 1;
var numStr = num.toFixed(1); //result is "1.0"
Подробнее об исправлении - http://www.w3schools.com/jsref/jsref_tofixed.asp.
Чтобы было ясно, мы говорим о преобразовании числа в строку, а не числа в число с плавающей точкой (такого типа не существует в javascript), что можно понять из описания вопроса. toFixed
всегда будет возвращать строку с указанным количеством десятичных знаков.
Ну, для тех, кто интересуется магией регулярных выражений, вот оно: оно взято из библиотеки stringify-with-floats npm, но изменено для поддержки любой длины с плавающей запятой.
1 и 1.0 идентичны в Javascript. Если вы зафиксируете число с плавающей точкой, которое имеет больше, чем просто конечный ноль, оно будет правильно сохранять это значение:
JSON.stringify(1.5) // "1.5"