У меня есть эта строка кода, которая округляет мои числа до двух десятичных знаков. Но я получаю такие числа: 10,8, 2,4 и т. Д. Это не мое представление о двух десятичных знаках, так как я могу улучшить следующее?
Math.round(price*Math.pow(10,2))/Math.pow(10,2);
Я хочу цифры как 10.80, 2.40 и т. Д. Использование JQuery хорошо для меня.
0.565
,0.575
,1.005
), я могу предложить еще раз , глядя на этом ответ , который получает их исправить?number.toFixed(x)
метод для преобразования его в строку с необходимым количеством нулей. Например, округлить1.34
до1.3
кросс-браузерным методом, затем добавить 1 ноль и преобразовать в строку с помощью1.3.toFixed(2)
(чтобы получить"1.30"
).Ответы:
Чтобы отформатировать число с использованием записи с фиксированной запятой, вы можете просто использовать метод toFixed :
Обратите внимание, что
toFixed()
возвращает строку.ВАЖНО : обратите внимание, что toFixed не округляет 90% времени, он возвращает округленное значение, но во многих случаях это не работает.
Например:
2.005.toFixed(2) === "2.00"
ОБНОВИТЬ:
В настоящее время вы можете использовать
Intl.NumberFormat
конструктор. Это часть Спецификации Интернационализации API ECMAScript (ECMA402). Он имеет довольно хорошую поддержку браузера , в том числе даже IE11, и она полностью поддерживается в Node.js .В качестве альтернативы вы можете использовать
toLocaleString
метод, который внутренне будет использоватьIntl
API:Этот API также предоставляет вам широкий выбор вариантов форматирования, например, разделители тысяч, символы валюты и т. Д.
источник
(0.09).toFixed(1);
дает 0,0 в IE8Math.Round(0.09)
вернется,0
так что это всегда даст0.0
...Math.round(value*100)/100
лучше работает для 2DP.Это старая тема, но она по-прежнему занимает первое место в результатах поиска Google, и предлагаемые решения имеют ту же проблему с десятичными числами с плавающей запятой. Вот (очень общая) функция, которую я использую, благодаря MDN :
Как мы видим, мы не получаем эти проблемы:
Эта универсальность также предоставляет некоторые интересные вещи:
Теперь, чтобы ответить на вопрос ОП, нужно набрать:
Или, для более краткой, менее общей функции:
Вы можете позвонить с помощью:
Различные примеры и тесты (спасибо @ tj-crowder !):
Показать фрагмент кода
источник
Я обычно добавляю это в свою личную библиотеку, и после некоторых предложений и использования решения @TIMINeutron, а затем, делая его адаптируемым для десятичной длины, этот вариант подходит лучше всего:
будет работать для зарегистрированных исключений.
источник
Я не знаю, почему я не могу добавить комментарий к предыдущему ответу (возможно, я безнадежно слеп, не знаю), но я нашел решение, используя ответ @ Miguel:
И два комментария (от @bighostkim и @Imre):
precise_round(1.275,2)
невозвращением 1.28precise_round(6,2)
не возвращением 6,00 (как он хотел).Мое окончательное решение заключается в следующем:
Как видите, мне пришлось добавить немного «исправления» (это не то, что есть, но поскольку Math.round с потерями - вы можете проверить это на jsfiddle.net - это единственный способ, который я знал, как «исправить» " Это). Это добавляет 0,001 к уже дополненному числу, таким образом, это добавляет
1
три0
с справа от десятичного значения. Так что это должно быть безопасно для использования.После этого я добавил,
.toFixed(decimal)
чтобы всегда выводить число в правильном формате (с правильным количеством десятичных знаков).Вот и все. Используйте это хорошо;)
РЕДАКТИРОВАТЬ: добавлена функциональность для «коррекции» отрицательных чисел.
источник
precise_round(1.27499,2)
теперь также возвращает 1,28 ... Это не так,Math.round
что с потерями; способ, которым компьютеры внутренне хранят значения с плавающей запятой. По сути, вы обречены на провал с некоторыми значениями, прежде чем данные даже попадут в вашу функцию :)Один из способов на 100% быть уверенным, что вы получите число с двумя десятичными знаками:
Если это вызывает ошибки округления, вы можете использовать следующее, как объяснил Джеймс в своем комментарии:
источник
var answer = (Math.round((num * 1000)/10)/100).toFixed(2);
Используйте этот метод ниже
И если вы хотите, чтобы номер был фиксированным, используйте
источник
Я не нашел точного решения этой проблемы, поэтому я создал свое собственное:
Примеры:
источник
@heridev и я создали небольшую функцию в jQuery.
Вы можете попробовать следующее:
HTML
JQuery
ДЕМО ОНЛАЙН:
http://jsfiddle.net/c4Wqn/
источник
input
событие. Это не создает мерцающего эффекта, а также срабатывает при доступе к полю с помощью JSПроблема со значениями с плавающей запятой заключается в том, что они пытаются представить бесконечное количество (непрерывных) значений с фиксированным количеством битов. Естественно, в игре должны быть некоторые потери, и вы будете укушены некоторыми ценностями.
Когда компьютер хранит 1,275 как значение с плавающей запятой, он на самом деле не будет помнить, было ли это 1,275 или 1,27499999999999993 или даже 1,27500000000000002. Эти значения должны давать разные результаты после округления до двух десятичных знаков, но они не будут, поскольку для компьютера они выглядят точно так же после сохранения в виде значений с плавающей запятой, и нет никакого способа восстановить потерянные данные. Любые дальнейшие вычисления только накапливают такую неточность.
Так что, если точность имеет значение, вы должны избегать значений с плавающей точкой с самого начала. Самые простые варианты
Например, при использовании целых чисел для хранения числа сотых функция поиска действительного значения довольно проста:
Со строками вам понадобится округление, но оно все еще управляемо:
Обратите внимание, что эта функция округляет до ближайшего, связывает от нуля , в то время как IEEE 754 рекомендует округлять до ближайшего, даже в качестве поведения по умолчанию для операций с плавающей запятой. Такие модификации оставлены в качестве упражнения для читателя :)
источник
Вот простой
Используйте как
alert(roundFloat(1.79209243929,4));
Jsfiddle
источник
Округлите десятичное значение, затем используйте
toFixed(x)
ожидаемые цифры.Вызов
parseDecimalRoundAndFixed (10.800243929,4) => 10.80 parseDecimalRoundAndFixed (10.807243929,2) => 10.81
источник
Округлить вниз
Округлять
Ближайший тур
источник
источник
Вот мое 1-строчное решение:
Number((yourNumericValueHere).toFixed(2));
Вот что происходит:
1) Сначала вы применяете
.toFixed(2)
число, к которому хотите округлить десятичные знаки. Обратите внимание, что это преобразует значение в строку из числа. Так что, если вы используете Typescript, он выдаст такую ошибку:"Тип 'строка' не может быть назначен типу 'число'"
2) Чтобы вернуть числовое значение или преобразовать строку в числовое значение, просто примените
Number()
функцию к так называемому «строковому» значению.Для уточнения посмотрите на пример ниже:
ПРИМЕР: у меня есть количество, которое имеет до 5 цифр в десятичных разрядах, и я хотел бы сократить его до 2 десятичных разрядов. Я делаю это так:
источник
Поместите следующее в какую-то глобальную область:
а затем попробуйте :
Обновить
Обратите внимание, что
toFixed()
может работать только для числа десятичных знаков между,0-20
т. Е.a.getDecimals(25)
Может генерировать ошибку JavaScript, поэтому для удобства вы можете добавить некоторые дополнительные проверки, т. Е.источник
это вернет случайное число от 1 до 100, округленное до 2 десятичных знаков.
источник
Это сработало для меня: округление десятичных дробей в JavaScript
источник
Используя этот ответ по ссылке: https://stackoverflow.com/a/21029698/454827
Я строю функцию, чтобы получить динамические числа десятичных дробей:
Вот рабочий пример: https://jsfiddle.net/wpxLduLc/
источник
источник
В этих примерах вы все равно получите ошибку при попытке округлить число 1.005, решение состоит в том, чтобы использовать библиотеку, такую как Math.js, или эту функцию:
источник
Я получил некоторые идеи из этого поста несколько месяцев назад, но ни один из ответов здесь, ни ответы из других постов / блогов не могли обработать все сценарии (например, отрицательные числа и некоторые "счастливые числа", найденные нашим тестировщиком). В итоге наш тестер не обнаружил никаких проблем с этим методом ниже. Вставка фрагмента моего кода:
У меня также есть комментарии к коду (извините, я уже забыл все детали) ... Я публикую свой ответ здесь для дальнейшего использования:
источник
Я исправил проблему модификатором. Поддержка 2 десятичных только.
источник
Это должно дать:
10.20
Это должно дать:
0.05
Это должно дать:
4.04
и т.п.
источник
источник
Это очень просто и работает так же, как и любой другой:
Так как toFixed () может вызываться только для чисел и, к сожалению, возвращает строку, это делает весь анализ для вас в обоих направлениях. Вы можете передать строку или число, и вы получите номер обратно каждый раз! Вызов parseNumber (1.49) даст вам 1, а parseNumber (1.49,2) даст вам 1,50. Так же, как лучшие из них!
источник
Вы также можете использовать
.toPrecision()
метод и некоторый пользовательский код и всегда округлять до n-го десятичного знака независимо от длины части int.Вы также можете сделать его плагином для лучшего использования.
источник
Просто как это.
источник
Я нашел очень простой способ, который решил эту проблему для меня и может быть использован или адаптирован:
источник
100% работает !!! Попробуй это
источник