2013-03-07 3 views
2

У меня есть эта проблема с округлением или округлением с помощью javascript. Ну, он выполняет свою работу, но есть некоторые сценарии, в которых он не выполняет работу должным образом.Лучший способ округления или округления в javascript

Например.

Цена 0,30 с 15% -ой скидкой должна составлять 0,255 или 0,26. (это как-то хорошо)

Цена 79.99 с 50% -ой скидкой должна иметь 40 результат. (Фактический результат 39,995)

Пытались использовать это в качестве ссылки Using toFixed(2) and math round to get correct rounding

также сделал этот процесс Math.round(value*Math.pow(10,dec))/Math.pow(10,dec);

Любые идеи?

Thanks

Это мой первоначальный тест. Хотя это всего лишь начальный тест, что я сделал это проверил, если две последние цифры больше 5 затем применить Math.ceil, что бы к 0.255 быть 0.26, но при использовании 39.99 результат все равно будет 39.99 хотя 39.99 следует использовать Math.round так, что результатом будет 40.

То, что я хотел бы выполнить, состоит в том, чтобы иметь возможность округлять или округлять любое число, если оно требует округления или если оно требует округления.

UPDATE

Я был в состоянии решить мою собственную проблему. (Atleast для моей конкретной среды)

http://jsfiddle.net/xMj3M/4/

+3

Я не понимаю ваш вопрос, какую степень точности вы бы хотели достичь?В первую очередь вам нужна точность двух знаков после запятой и ни одного, ни 1 десятичного разряда во втором –

+0

@Benjamin Gruenbaum: в обоих случаях он округляется до 2 десятичных знаков – zerkms

+0

Это должно ответить на ваш вопрос на две десятичные точки: http://stackoverflow.com/questions/5191088/how-to-round-up-a-number-in-javascript –

ответ

1

Вы можете попробовать:

var someNumber = 36.7327; 
var someNumberRoundedTo2Decimals = (Math.round((someNumber * 100))/100); 
// = 36.73 

в основном это перемещает десятичную направо 2 цифры ..

3673.27 

затем округляет его к общему числу

3673 

перемещает десятичную обратно влево 2 места

36.73 
+0

Разве это не то, что ОП уже делает, это не работает и подсказывает вопрос? –

+0

возможно (хотя 'dec' не был определен, поэтому я могу только предположить, что OP используется' 2') – scunliffe

2

Это из-за, как поплавки обрабатываются. Я предлагаю иметь только ваши исходные числа в целых числах, поэтому вы начнете с 7999. Если вы используете этот метод, вы получите правильный результат.

В целом, особенно при работе с деньгами, всегда полезно сначала работать в грошах, а затем выводить их в формате валюты.

Смежные вопросы