Мне нужно показать значение валюты в формате 1K, равное одной тысяче, или 1.1K, 1.2K, 1.9K и т. Д., Если это не четные тысячи, в противном случае, если число меньше тысячи, выведите обычные 500, 100, 250 и т. Д. , используя JavaScript для форматирования числа?
javascript
jquery
formatting
numbers
Карл Вейс
источник
источник
M
иG
?Ответы:
Похоже, это должно работать для вас:
источник
$mynumber_output
где я могу вставить это, чтобы использовать его? Например, скажем$mynumber_output
= 12846, я хотел бы преобразовать 12846 в12.8k
Более обобщенная версия:
источник
if (num >= si[i].value)
наif (Math.abs(num) >= si[i].value)
.replace(rx, "$1")
?1.0
становится1
и1.10
становится1.1
Вот простое решение, которое избегает всех
if
утверждений (с силойMath
).Бонус Мем
Что означает
SI
?источник
Math.abs
чтобы добавить поддержку отрицательных чисел, например , что:var tier = Math.log10(Math.abs(number)) / 3 | 0;
.Дальнейшее улучшение ответа Салмана, потому что он возвращает nFormatter (33000) как 33.0K
сейчас nFormatter (33000) = 33K
источник
Спасибо за комментарий, я удалил Math.round10 зависимость.
источник
Math.abs(num) >= decimal
.Многие ответы в этом потоке становятся довольно сложными, с использованием объектов Math, объектов карты, циклов for, регулярных выражений и т. Д. Но эти подходы на самом деле не улучшают читабельность кода или производительность. Прямой подход, кажется, предлагает лучший дизайн.
Форматирование денежного значения с помощью K
Форматирование денежной суммы с помощью KMBT
Используя отрицательные числа
источник
'-' + formatCash(-1 * number)
Дайте кредит Уэйлону Флинну, если вам это нравится
Это было улучшено благодаря его более элегантному подходу к обработке отрицательных чисел и кейсу «.0».
Чем меньше у вас циклов и случаев «если», тем лучше ИМО.
jsFiddle с тестовыми примерами -> https://jsfiddle.net/xyug4nvz/7/
источник
abbreviateNumber(999999) == '1000k'
вместо'1M'
. Это потому, чтоtoFixed()
также округляет числа. Не уверен, как это исправить, хотя: /toFixed()
число округляется в любом случае, вы также можете округлить число перед отправкойabbreviateNumber()
, поэтому оно возвращается1M
вместо1000k
. Не решение, а обходной путь.const floored = Math.floor(scaled * 10) / 10;
ES2020 добавляет поддержку для этого в
Intl.NumberFormat
использовании нотации следующим образом:NumberFormat
спецификации:Обратите внимание, что в настоящее время не все браузеры поддерживают ES2020, поэтому вам может понадобиться этот Polyfill: https://formatjs.io/docs/polyfills/intl-numberformat
источник
notation
и,compactDisplay
но FireFox 77 и Safari 13.1 по-прежнему не поддерживают его, поэтому вам, вероятно, понадобится полифилл.это довольно элегантно.
источник
Вы можете использовать пакет формата d3 , смоделированный после расширенного форматирования строк Python PEP3101 :
источник
Дальнейшее улучшение ответа @ Yash с поддержкой отрицательных чисел:
источник
Этот пост довольно старый, но я как-то дошел до этого поста в поисках чего-то. Поэтому, чтобы добавить мой ввод, Numeral js - это единственное решение в наши дни. Это дает большое количество методов, чтобы помочь форматированию чисел
http://numeraljs.com/
источник
Краткий и общий метод
Вы можете сделать
COUNT_FORMATS
объект конфигурации максимально длинным или коротким, в зависимости от диапазона значений, которые вы тестируете.источник
Если добавить верхний ответ, это даст 1к на 1000 вместо 1,0к
источник
Модифицированная версия ответа Уэйлона Флинна с поддержкой отрицательных показателей:
Ожидаемый результат:
источник
!Number.isFinite
' K M G T P E Z Y'
на,' K M'
если вы хотите, чтобы максимальная единица былаM
Ниже код 1K = 1024, если вы хотите 1K = 1000, измените все 1024 на 1000.
источник
Улучшение ответа @ tfmontague для форматирования десятичных знаков. 33.0к до 33к
источник
Не устраивает ни одно из опубликованных решений, поэтому вот моя версия:
Поддерживает параметр точности
источник
Я придумал очень кодовый гольф, и он очень короткий!
источник
Дальнейшее улучшение ответа Салмана из-за таких случаев, как nFormatter (999999,1), который возвращает 1000K.
источник
Самый простой и легкий способ сделать это
Это работает для любого числа. В том числе
L
Cr
и т. Д.источник
Исключив цикл в решении @ martin-sznapka, вы сократите время выполнения на 40%.
Тест скорости (200000 случайных выборок) для различных решений из этой темы
источник
источник
Эта функция может преобразовать огромные числа (как положительные, так и отрицательные) в удобный для чтения формат без потери точности:
источник
Я использую эту функцию. Это работает для обоих
php
иjavascript
.источник
Я решил подробно рассказать об ответе @ Novellizator, чтобы удовлетворить мои потребности. Я хотел гибкую функцию, чтобы справиться с большинством моих потребностей форматирования без внешних библиотек.
Характеристики
Примеры
функция
источник
Вау, здесь так много ответов. Я подумал, что расскажу вам, как я решил эту проблему, так как она кажется самой простой для чтения, обрабатывает отрицательные числа и выходит далеко в диапазоне килограммов для JavaScript. Также было бы легко изменить то, что вы хотите, или расширить еще дальше.
источник
Более короткая альтернатива:
источник