#javascript #math #rounding
#javascript #математика #округление
Вопрос:
здравствуйте, я хочу округлить сумму в javascript, но не могу этого сделать и полностью застрял. Мой сценарий таков: у меня есть base
сумма и marukup %
включено base
. На основе этих двух я хочу рассчитать total amount
. Я вычислил сумму, но я хочу округлить результат. Я использовал следующую формулу
amount=base ((base/100)*markup
Эта формула всегда дает мне результат без десятичной точки. Я хочу получить точную сумму с точностью до двух десятичных знаков. Я использовал math.round
вот так
amount=math.round(base ((base/100)*markup).toFixed(2)
но он всегда возвращает результат без десятичной точки. Например, мое базовое значение равно 121
, а разметка — 5%
. amount
Должно быть 127.05
. Но приведенная выше формула всегда возвращает 127
. Какие-либо рекомендации?
Комментарии:
1. Не знаю, что вы делаете, но
121 ((121/100)*5)
выдает меня127.05
.Math.round
всегда округляет до ближайшего целого числа, которое, насколько я понял, вам не нужно.2. @Flex Kling Спасибо, но я хочу округлить ответ до 2 десятичных знаков.. Как я могу это сделать?
3. Все, что вы когда-либо хотели знать о округлении в javascript и форматировании как деньги: merlyn.demon.co.uk/js-round.htm#RiJ
Ответ №1:
Я почти уверен, что math.round возвращает целое число. Даже если вы округлите его тогда, это все равно будет просто 127,00.
Вот правильное решение (но это непросто):
Не используйте нецелые значения за деньги!
Это не работает.
Используйте целое число в центах. То есть вместо 127 сохраняйте в своем приложении 12700.
Таким образом, все округления должны работать нормально.
Ответ №2:
toFixed(n)
Функция округляет число до n десятичных знаков, в Math.round
использовании вообще нет необходимости. Попробуй:
total = function (base, markup) { return (base (base * markup / 100)); };
amount = total(121,5).toFixed(2);
Обратите внимание, что amount
будет typeof String
и не Number
.
Ответ №3:
Это должно сработать: amout = (Math.round((база * (1 разметка))* 100) / 100).toFixed(2)
Кстати, я использовал разметку как 5/100…
Ответ №4:
Для меня это звучит как задача с целочисленным делением. Я бы предположил, что javascript рассматривает 100 как значение int.
Попробуйте это:
amount=(base ((base/100.toFixed(2))*markup).toFixed(2)