Я хотел бы отформатировать мои числа, чтобы всегда отображать 2 десятичных знака, округляя, где это применимо.
Примеры:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Я использовал это:
parseFloat(num).toFixed(2);
Но это отображается 1
как 1
, а не 1.00
.
Ответы:
Live Demo
Показать фрагмент кода
Обратите внимание, что он округляется до 2 десятичных знаков, поэтому входные данные
1.346
вернутся1.35
.источник
1
отображать как1.00
и1.341
отображать как1.34
.(+num).toFixed(2)
. Он даже сохраняет ошибку округления в оригинале, см . Ответ Нейта .Показать фрагмент кода
источник
1.34
для выраженияNumber(1.345).toFixed(2)
.1.345
является примером числа, которое не может быть сохранено точно с плавающей запятой, поэтому я думаю, что причина, по которой он не округляется, как вы ожидаете, заключается в том, что он на самом деле хранится как число немного менее 1,345, и он округляется вниз. Если вы протестируете вместо этого,(1.34500001).toFixed(2)
тогда вы увидите, что все правильно округляется до1.35
Этот ответ не удастся, если
value = 1.005
.Как лучшее решение можно избежать проблемы округления, используя числа, представленные в экспоненциальной записи:
Более чистый код, предложенный @Kon и первоначальным автором:
Вы можете добавить
toFixed()
в конце, чтобы сохранить десятичную точку, например:1.00
но обратите внимание, что она вернется в виде строки.Кредит: округление десятичных дробей в JavaScript
источник
toFixed
есть такая проблема округления. Ваш ответ должен быть принятым.Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
источник
toPrecision
только форматирует число к определенному числу десятичных знаков, просто пропуская лишние места, но не округляя их . Конечно, это тоже может быть очень полезно, но важно понимать разницу.(20.55).toPrecision(3) "20.6"
toFixed
:const formattedVal = Number(val.toFixed(2));
не используйтеtoPrecision
, так как при использовании точного параметра он учитывает недесятичные числа.Для наиболее точного округления создайте эту функцию:
и используйте его для округления до 2 десятичных знаков:
Спасибо Razu , этой статье и справке Math.round от MDN .
источник
Для современных браузеров используйте
toLocaleString
:Укажите тег локали в качестве первого параметра для управления десятичным разделителем . Для точки используйте, например, английский язык США:
который дает:
В большинстве стран Европы в качестве десятичного разделителя используется запятая, поэтому, если вы, например, используете шведский / шведский язык:
это даст:
источник
Самый простой ответ:
Пример: http://jsfiddle.net/E2XU7/
источник
toFixed
уже было предложено в stackoverflow.com/a/13292833/218196 . Какую дополнительную информацию предоставляет ваш вопрос?toFixed
на номер.Гораздо более общее решение для округления до N мест
источник
roundN(-3.4028230607370965e+38,2)
возвращается"-3.4028230607370965e+38"
вместо ожидаемых 0,00https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
источник
Если вы уже используете jQuery, вы можете посмотреть на использование числового формата jQuery плагина .
Плагин может возвращать отформатированные числа в виде строки, вы можете установить десятичные разделители и разделители тысяч, а также выбрать количество отображаемых десятичных знаков.
Вы также можете получить jQuery Number Format от GitHub .
источник
Это то, что вы имеете в виду?
источник
Преобразуйте число в строку, сохранив только два десятичных знака:
Результат n будет:
источник
Вы ищете пол?
источник
источник
Вот также универсальная функция, которая может форматировать любое количество десятичных знаков:
источник
Там, где требуется определенное форматирование, вы должны написать собственную процедуру или использовать библиотечную функцию, которая делает то, что вам нужно. Основной функциональности ECMAScript обычно недостаточно для отображения отформатированных чисел.
Подробное объяснение округления и форматирования здесь: http://www.merlyn.demon.co.uk/js-round.htm#RiJКак правило, округление и форматирование должны выполняться только как последний шаг перед выводом. Это может привести к неожиданно большим ошибкам и разрушению форматирования.
источник
источник
Просто наткнитесь на этот самый длинный поток, ниже мое решение:
Дайте мне знать, если кто-нибудь может проткнуть дыру
источник
Показать фрагмент кода
источник
parseFloat(num.toFixed(2))
Вы не даете нам полную картину.
javascript:alert(parseFloat(1).toFixed(2))
показывает 1,00 в моих браузерах, когда я вставляю его в строку адреса. Однако, если вы сделаете что-то с этим потом, оно вернется.источник
источник
Мне пришлось выбирать между преобразованиями parseFloat () и Number (), прежде чем я смог сделать вызов toFixed (). Вот пример форматирования чисел после захвата пользовательского ввода.
HTML:
Обработчик события:
Приведенный выше код приведет к исключению TypeError. Обратите внимание, что хотя тип ввода html - «число», пользовательский ввод - это тип данных «строка». Однако функция toFixed () может быть вызвана только для объекта, который является Number.
Мой окончательный код будет выглядеть следующим образом:
Причина, по которой я предпочитаю приводить с помощью Number () вместо parseFloat (), заключается в том, что мне не нужно выполнять дополнительную проверку ни для пустой входной строки, ни для значения NaN. Функция Number () автоматически обработает пустую строку и преобразует ее в ноль.
источник
Я люблю:
Округлите число с двумя десятичными точками, а затем обязательно проанализируйте его,
parseFloat()
чтобы получить число, а не строку, если вам не важно, является ли оно строкой или числом.источник
parseFloat("1.00") // 1
Расширить объект Math с помощью точного метода
источник
parseInt(number * 100) / 100;
работал на меня.источник
Вот еще одно решение для округления только с использованием минимального значения, то есть убедитесь, что рассчитанная сумма не будет больше исходной суммы (иногда необходимой для транзакций):
источник
Вы можете попробовать этот код:
источник
Попробуйте код ниже:
источник
источник
Вот как я решаю свою проблему:
источник