Периодически, разрабатывая конфигурации, сталкиваемся с проблемами дробного числа в Jscript'е. Пример проблемы, на скриншоте:
Единым решением, пока, остается округление всюду, где только не уверены в правильности вычислений.
Какие будут соображения? Кто и как обходит данную проблему?
Так эти числа потом либо в датафилд ложаться, либо в отчете отображаются. И там и там они округлятся. Проблема только при отображении в сообщениях, там округление и используем.
В данном примере, система проверяет достаточно ли в данной партии продукта для отгрузки. Нужно: 0,6 единиц.
Доступно: 1,7 - 1,1 = 0,5999999999999999999
Выводит сообщение, что НЕ достаточно товаров на складе для отгрузки :confused:
Ну на сколько я помню в численных методах с учетом возможной погрешности применяется метод сравнения
0.6 - (1.7 - 1,1) > eps
где еps достаточно малая ненулеавя величина. Берем eps = 1e-10. Пишем функцию сравнения
function IsGreat(a, b){ return ((a - b) > eps) }
ну и остальные функции сравнения чисел.
Когда начинал писать, идея казалась бредом, а сейчас даже нравится начинается :)
Я бы еще (a-b) по модулю взял, иначе работать не будет.
"Попов Александр" написал:Я бы еще (a-b) по модулю взял, иначе работать не будет.
На самом деле для IsGreat работать будет - попробуйте на приведенном примере :) А вот для IsEqual и IsGreatOrEqual действительно нужен модуль.
Спасибо за уточнение! Но, цитата не моя :wink:
Вы еще скажите что и мопед не Ваш :)
Сорри, Акелла промахнулся :)
"Виталий Ковалишин aka samael" написал:С кем не бывает?!
Этот вопрос мне адресован? :)