Я должен сделать денежные вычисления в JavaScript или как вызов Ajax?

Я создаю веб-приложение с помощью JQuery, Дорожки, Spring и JPA (В спящем режиме).

У меня есть страница, которая позволяет пользователям вводить много позиций порядка, и каждый раз, когда onblur происходит в ценовом поле, мне связали событие JQuery с полем, которое суммирует все ценовые поля (это - промежуточный итог), вычисляет 10%-й налог и добавляет налог к промежуточному итогу. Я обновляю страницу для отображения промежуточного итога, налога и общего итога.

Мой вопрос, я должен делать это вычисление в JavaScript? Если так, как я могу быть уверен, что округление и т.д. работает правильно? Я немного волнуюсь по поводу проблем с точностью.

Для меня было бы лучше выполнить вызов Ajax, чтобы сделать вычисление в Java?

Любой совет был бы большим!

10
задан JMM 16 December 2009 в 02:41
поделиться

6 ответов

Как правило, вам нужно измерить, что важно для вашего приложения. Если это абсолютная точность, то сделайте это как вызов AJAX, потому что между браузерами, компьютерами и ОС могут быть различия в округлении.

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

Поскольку мы имели дело с валютой с двумя цифрами, мы умножили все на 10 000 и выполнили вычисления. Округление до целого числа и деление на 10 000 с усечением результата до двух знаков после запятой.

Это делает обмен данными между браузером и сервером аккуратно и последовательно.

15
ответ дан 3 December 2019 в 16:10
поделиться

Согласно comp.lang.javascript FAQ , Javascript использует IEEE-754 и поэтому имеет точность 15-16 цифр при выполнении математических операций с плавающей запятой. Этого должно быть достаточно для денежных операций при условии, что вы используете в Javascript то же округление, что и на стороне сервера.

Но если вам нужно быть абсолютно уверенным, что это правильно во всех браузерах, вызов Ajax будет самый безопасный курс действий.

6
ответ дан 3 December 2019 в 16:10
поделиться

Если вы принимаете заказы, я бы рекомендовал вам всегда выполнять вычисления на стороне сервера перед подтверждением заказа, чтобы избежать злонамеренного вмешательства в данные, отправляемые клиентом. Тем не менее, вы можете выполнить динамическое обновление, используя JavaScript, с соответствующим заявлением об отказе от ответственности в отношении точности, а затем представить пользователю свои вычисления на стороне сервера, прежде чем они подтвердят заказ.

3
ответ дан 3 December 2019 в 16:10
поделиться

вы должны сделать это на стороне клиента (я предполагаю, что у вас есть валидаторы на стороне клиента), чтобы пользователь может видеть общее количество (я бы не хотел, чтобы мы выполняли двусторонние вызовы на сервер, чтобы просто увидеть общий результат), а также делать это на стороне сервера. Считывание значений из POST было бы не очень хорошей идеей, поскольку кто-то с HTTPProxy могут изменить эти значения, если вы берете его из HTTP POST.

TamperIE инструмент для вмешательства в HTTP GET и POST и песочницу , где вы можете поиграть с

Edit : Да, вы можете выполнить расчет на сервере, сделав вызов AJAX, но вам все равно потребуется проверить общую сумму (по количеству продуктов + налог), когда пользователь отправит заказ

2
ответ дан 3 December 2019 в 16:10
поделиться

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

0
ответ дан 3 December 2019 в 16:10
поделиться

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

Вы можете узнать о хороших и плохих частях Javascript здесь: http://www.crockford.com/

0
ответ дан 3 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: