антиКИЛЛЕР
Well-Known Member
- Регистрация
- 28.07.2011
- Сообщения
- 92
Итак, у меня следующая ситуация:
на странице есть n-ое количество форм (может быть и штук 50). В каждой из этих форм есть по 8 вычисляемых полей и по 11 вводимых пользователями полей и выводимых из БД. Все вводимые пользователями поля и выводимые из БД поля имеют точность в 9 знаков после запятой, а все вычисляемые поля должны иметь точность в 2 знака после запятой.
Поля вводимые пользователями используются для рассчёта других 7 полей. При этом все поля взаимосвязаны между собой и изменения в одном из них, влияют на значения в во всех других.
При этом есть ещё общая форма с коэффициентами, где каждое из полей влияет на все остальные.
Так вот, проблема в том, что эти 7 полей - считаются деньги. И точность нужна +-1 копейка.
Алгоритм вычислений таков, что нужно всё считать как с можно большей точностью, а потом только, на конечном этапе округлять до двух знаков (если округлять сразу, не совсем верные цифры получаются).
А особенность JS вычислений, как раз в неточности. Ошибка 0.0000000000000001 - это нормально, при округлении до 2-х знаков она строется. Но особенности алгоритма таковы, что в данном случае ошибка такая может накапливаться и влиять на результат впоть до 10 копеек, что недопустимо.
В прицнипе, логично в таком случае передавать данные на сервер, там уже считать, и выдавать в js обратно. Но тут проблема в том, что полей таких много, и вычислять итоговые суммы пользователям нужно "на лету", по onkeyup, ну или по onchange как минимум. Передавать каждый раз такой обьём данных (в самом лучшем случае это будет 70 полей с цифрами) на сервер весьма накладно, да и не хочется. (всё равно придётся когда пользователи сохраняют, но сохраняют они один раз, а чтобы цифры подобрать нужные под нужную отчётность и требуемые показатели, менять значения они могут по 50 раз перед сохранением).
Так вот, какие кто знает способы повышения точности, может есть какие то допольнительные библиотеки, устраняющие эти ошибки при вычислениях или ещё что?
Очень бы хотелось услышать о вариантах решения этой проблемы. Вариант с передачей аяксом довольно сильно тормозит и куча запросов от 2-3 пользователей могут сделать плохо серверу, а заставлять пользователей вводить всё что хотят а потом жать на кнопку "произвести рассчёт" не очень хочется.
Сейчас вижу вариант сделать вычисления аяксом по onkeyup, но при этом сделать так, чтобы отправка аякс запроса происходила не чаще чем раз в 1.5-2 секунды.
Но может есть способы заставить JS считать точно? Может кто сталкивался, знает?
на странице есть n-ое количество форм (может быть и штук 50). В каждой из этих форм есть по 8 вычисляемых полей и по 11 вводимых пользователями полей и выводимых из БД. Все вводимые пользователями поля и выводимые из БД поля имеют точность в 9 знаков после запятой, а все вычисляемые поля должны иметь точность в 2 знака после запятой.
Поля вводимые пользователями используются для рассчёта других 7 полей. При этом все поля взаимосвязаны между собой и изменения в одном из них, влияют на значения в во всех других.
При этом есть ещё общая форма с коэффициентами, где каждое из полей влияет на все остальные.
Так вот, проблема в том, что эти 7 полей - считаются деньги. И точность нужна +-1 копейка.
Алгоритм вычислений таков, что нужно всё считать как с можно большей точностью, а потом только, на конечном этапе округлять до двух знаков (если округлять сразу, не совсем верные цифры получаются).
А особенность JS вычислений, как раз в неточности. Ошибка 0.0000000000000001 - это нормально, при округлении до 2-х знаков она строется. Но особенности алгоритма таковы, что в данном случае ошибка такая может накапливаться и влиять на результат впоть до 10 копеек, что недопустимо.
В прицнипе, логично в таком случае передавать данные на сервер, там уже считать, и выдавать в js обратно. Но тут проблема в том, что полей таких много, и вычислять итоговые суммы пользователям нужно "на лету", по onkeyup, ну или по onchange как минимум. Передавать каждый раз такой обьём данных (в самом лучшем случае это будет 70 полей с цифрами) на сервер весьма накладно, да и не хочется. (всё равно придётся когда пользователи сохраняют, но сохраняют они один раз, а чтобы цифры подобрать нужные под нужную отчётность и требуемые показатели, менять значения они могут по 50 раз перед сохранением).
Так вот, какие кто знает способы повышения точности, может есть какие то допольнительные библиотеки, устраняющие эти ошибки при вычислениях или ещё что?
Очень бы хотелось услышать о вариантах решения этой проблемы. Вариант с передачей аяксом довольно сильно тормозит и куча запросов от 2-3 пользователей могут сделать плохо серверу, а заставлять пользователей вводить всё что хотят а потом жать на кнопку "произвести рассчёт" не очень хочется.
Сейчас вижу вариант сделать вычисления аяксом по onkeyup, но при этом сделать так, чтобы отправка аякс запроса происходила не чаще чем раз в 1.5-2 секунды.
Но может есть способы заставить JS считать точно? Может кто сталкивался, знает?