Принудительное значение с плавающей запятой при использовании 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"
Другие вопросы по тегам