раунд в яваскрипте застрял - PullRequest
0 голосов
/ 14 апреля 2011

Привет. Я хочу округлить сумму в 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.Любые рекомендации?

Ответы [ 4 ]

2 голосов
/ 14 апреля 2011

Я почти уверен, что math.round возвращает целое число.Даже если вы округлите его, в любом случае это будет 127,00.

Вот правильное решение (но это не легко):
Не используйте нецелые значения для денег!
Это не работает.

Используйте целое число в центах.То есть вместо 127 сохраните 12700 в вашем приложении.
Таким образом, все округления должны работать нормально.

1 голос
/ 14 апреля 2011

Функция toFixed(n) округляет число до n десятичных знаков, нет необходимости использовать Math.round вообще.Попробуйте:

total = function (base, markup) { return (base + (base * markup / 100)); }; 
amount = total(121,5).toFixed(2);

Обратите внимание, что amount будет typeof String, а не Number.

0 голосов
/ 14 апреля 2011

Звучит как проблема целочисленного деления для меня.Я предполагаю, что javascript видит 100 как целое число.

Попробуйте это:

amount=(base+((base/100.toFixed(2))*markup).toFixed(2)
0 голосов
/ 14 апреля 2011

Это должно работать: amout = (Math.round ((база * (1 + разметка)) * 100) / 100). toFixed (2)

Кстати, я использовал разметку как 5/100 ...

...